我正在用cPanel使用CentOS。 在我的服务器上,所有的MySQL数据库保存在/var/lib/mysql 。 现在/var已经100%满了,MySQL已经停止工作了。 如何将数据库移动到像/home/mysql这样的新目录,特别是考虑到这个服务器是用cPanelpipe理的?
我不能证实这从cpanel,因为我没有访问,但这是从控制台通过SSH和sudo连接到根的例子。 有在/ etc / fstab中使用绑定条目而不是符号链接的参数,但是这适用于我。
我正常的程序是停止mysql,移动目录内容,链接原来的,然后重新启动mysqld。
[tomh@workstation001 ~]$ sudo su - [root@workstation001 ~]# [root@workstation001 ~]# service mysqld stop Stopping mysqld (via systemctl): [ OK ] [root@workstation001 ~]# mv /var/lib/mysql/ /opt/ [root@workstation001 ~]# ln -s /opt/mysql /var/lib/ [root@workstation001 ~]# ls -la /var/lib/mysql lrwxrwxrwx 1 root root 10 Feb 26 23:02 /var/lib/mysql -> /opt/mysql [root@workstation001 ~]# service mysqld start Starting mysqld (via systemctl): [ OK ] [root@workstation001 ~]# mysql -uroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.5.18-log MySQL Community Server (GPL) mysql> show databases; ... | Database | +-----------------------+ | information_schema | | mysql | | performance_schema | | test
我刚刚注意到一个类似的问题,这个问题很接近于一个重复的问题,在selinux中提到了一些上面提到的问题。 http://crashmag.net/change-the-default-mysql-data-directory-with-selinux-enabled
所以如果你有selinux还有一些额外的步骤。
如果你想改变mysql数据目录,你应该编辑mysqlconfiguration文件并改变datadir值。
datadir = /home/user/data
你的新数据目录必须由mysql拥有,并有适当的安全上下文。
chown -R mysql.mysql /home/user/data chcon -R -t mysqld_db_t /home/user/data
重启mysql服务器
/etc/init.d/mysqld restart
我发现这个一步一步的指导为我工作。
您必须安装:
yum install policycoreutils-python
指南:
查看mysql默认数据库位置的SELinux上下文:
~]# ls -lZ /var/lib/mysql drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
这显示了mysqld_db_t ,它是数据库文件位置的默认上下文元素。 这个上下文将不得不手动应用到这个例子中使用的新的数据库位置,以便它正常工作。
停止mysqld守护进程:
~]# systemctl stop mariadb.service
为数据库的新位置创build一个新目录。 在这个例子中,使用/ mysql /
~]# mkdir -p /mysql
将数据库文件从旧位置复制到新位置:
~]# cp -R /var/lib/mysql/* /mysql/
更改此位置的所有权以允许mysql用户和组访问。 这设置了SELinux仍将观察到的传统Unix权限:
~]# chown -R mysql:mysql /mysql
运行以下命令查看新目录的初始上下文:
~]# ls -lZ /mysql drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0 mysql
这个新创build的目录的上下文usr_t目前不适合SELinux作为MariaDB数据库文件的位置。 一旦上下文发生变化,MariaDB将能够在这个区域正常工作。
用文本编辑器打开主要的MariaDBconfiguration文件/etc/my.cnf ,并修改datadir选项,以便引用新的位置。 在这个例子中,应该input的值是/mysql :
[mysqld] datadir=/mysql
保存此文件并退出。
启动mysqld 。 该服务将无法启动,并且拒绝消息将被logging到/var/log/messages文件中:
~]# systemctl start mariadb.service Job for mariadb.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.
但是,如果审计守护进程正在运行,并且使用setroubleshoot服务,则拒绝将被logging到/var/log/audit/audit.log文件中:
SELinux is preventing `/usr/libexec/mysqld` "write" access on /mysql. For complete SELinux messages. run `sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71`
这种拒绝的原因是mysql没有正确标记MariaDB数据文件。 SELinux阻止MariaDB访问标记为usr_t的内容。 执行以下步骤来解决此问题:
运行以下命令为mysql添加一个上下文映射。 请注意, semanageutility没有默认安装。 如果在系统上缺less,请安装policycoreutils-python软件包。
~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"
这个映射被写入到/etc/selinux/targeted/contexts/files/file_contexts.local文件中:
~]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local /mysql(/.*)? system_u:object_r:mysqld_db_t:s0
现在使用restorecon实用程序将此上下文映射应用到正在运行的系统:
~]# restorecon -R -v /mysql
现在mysql位置已经标记了MariaDB的正确上下文,mysqld启动:
~]# systemctl start mariadb.service
确认上下文已经改变为mysql :
~]$ ls -lZ /mysql drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
位置已被更改和标记,并且mysqld已成功启动。 此时所有正在运行的服务都应进行testing以确认正常运行。
停止默认安装/实例
service mysqld stop
清除当前configuration
rm /etc/my.cnf
卸载默认安装/实例
yum remove mysql mysql-server -y
清除当前数据
test -d /var/lib/mysql/ && rm -rf /var/lib/mysql/
清除“新”数据元
test -d /mysql/mysql/ && rm -rf /mysql/mysql/
再次安装
yum install mysql mysql-server -y
检查服务状态
service mysqld status
启动它 – 只是为了创build第一个/默认结构
service mysqld start
检查服务状态
service mysqld status
中断当前的MySQL服务器安装
service mysqld stop
确保您不再有实例/服务正在运行
ps axu | grep mysql
将mysql数据目录移到“/ mysql”分区并创build符号链接
test -d /var/lib/mysql/ && mv /var/lib/mysql/ /mysql/ && ln -s /mysql/mysql /var/lib/
检查符号链接和真实path
ls -lrth /var/lib/ | grep mysql
设置新Datadir的权限
chown -R mysql:mysql /mysql/mysql
启动它
service mysqld start
尝试连接(请记住,MySQL的默认安装不会为“root”用户设置“pwd”,然后您应该连接“空密码”
mysql -u root -p --host 127.0.0.1
一旦连接到MySQL,创build一个新的数据库只是为了testing它是否工作,MySQL将创build文件夹/文件结构
create database DBTesteNew; exit
检查新的数据库是否在'新数据目录'
ls /mysql/mysql
确保将mysqld设置为在启动时启动
chkconfig mysqld on
重新开始
reboot