mysql 更改数据存储目录
mysql更改数据保存目录
参考:
https://www.cnblogs.com/kerrycode/p/4371938.html
https://www.cnblogs.com/kerrycode/p/12460771.html (潇湘隐者-靠谱)
系统环境 :CentOS Linux release 7.5.1804 (Core) / ubuntu18.04MySQL版本 : 8.0.18 MySQL Community Server - GPL / mysql5.7
默认情况下, MySQL的数据目录一般位于/var/lib/mysql下
1.首先,弄清楚MySQL的相关配置信息
找到MySQL的数据目录,以及配置文件my.cnf、错误日志的位置
1 | mysql> show variables like 'datadir%'; |
2. 对数据库做一个冷备份,以备不时之需。当然,你以可以用其它方式备份例如mysqldump的方式。
1 | # 关闭mysql开始备份数据 / 创建数据备份目录 / 开始备份 |
3. 移动数据目录到其它目录
1 | # 这里假设,我需要将数据库的数据目录迁移到/mysql_data/下。 |
注意:这里建议使用mv移动数据库目录,而是不是复制(cp命令),因为执行复制时,SELinux上下文将丢失,并且您稍后必须手动进行设置,如果你使用cp命令复制文件,如果没有使用参数-a,那么要记得修改目录的属主,否则你有可能遇到
“MySQL error: 1017 Can’t find file: (errno: 13)”
这样的错误。
4. 修改配置文件
(1)centos 只需要修改配置文件/etc/my.cnf再重启mysql即可
1 | # 一般情况下,只需修改datadir和socket等参数,具体根据你实际情况来判断那些参数需要修改 [client]为新增。 |
(2). ubuntu修改 /etc/apparmor.d/usr.sbin.mysqld 以及 /etc/mysql/mysql.conf.d/mysqld.cnf
https://www.cnblogs.com/hzw97/p/11589311.html
修改apparmor配置
AppArmor 是内核的一个安全增强模块,对程序存取资源进行限制,如果不修改,启动mysql,在journalctl -xe中会报以下错误
修改 /etc/apparmor.d/usr.sbin.mysqld (AppArmor) 将数据储存目录换为我们需要更换的数据存储目录
1 | # 原 |
修改mysql配置文件 mysql5.7 版本默认配置文件是 /etc/mysql/mysql.conf.d/mysqld.cnf
修改 /etc/mysql/mysql.conf.d/mysqld.cnf
1 | # 修改为需要更换的数据存储目录 |
重启mysql验证 必须执行下面3个步骤,否则修改不会生效,单独启动mysql依旧会报错。
1 | # 重启下面三个服务 |
修改过后,对于CentOS或RHEL操作系统而言,你可能需要修改SELinux的设置,而对于Ubuntu或Debian,你需要修改AppArmor的设置(这篇Ubuntu上更改MySQL数据库数据存储目已经有介绍了,这里就不重复了)。当如,对于CentOS或RHEL,如果你禁用了SELinux的话,那么就可以直接忽略这个设置,因为禁用SELinux的话,就会避免很多杂七杂八的问题,但是我们不是要回避问题,而是要弄清楚问题产生的根本原因。
如果是centos首先你要检查,是否开启了SELinux(ubuntu不需要检查ubuntu默认没有selinux)。如下所示:
1 | [root@KerryDB ~]# /usr/sbin/sestatus |
4. 扩展
centos不指定mysql.sock时将会报下面的解决解决方法是my.conf配置文件指定mysql.sock
1 | Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock |
结语祝好!













