1、看一下目前mysql数据存储的位
select @@datadir;
从这个结果我们可以看出,当前mysql的datadir是在/var/lib/mysql 目录里的
2、关掉连接mysql的各种程序服务
systemctl stop mysqld
或
service mysql stop
3、在期望的位置创建目录(datadir的新位置)
将目录的user和group变更为mysql(老位置也是这样的)
mkdir /home/data/mysql
chown -R mysql:mysql /home/data/mysql
4、将老位置目录下的东西复制到新位置下
cp -Rp /var/lib/mysql/* /home/local/data/mysql
5、修改mysql的config文件
默认情况下,mysql的config信息在/etc/my.cnf 里
先对当前的config文件做个备份
cp /etc/my.cnf /etc/my.cnf.orign
然后把vi my.cnf 修改成以下内容
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
[client]:
port=3306
socket=/data/mysql/mysql.sock
有文章成添加 client可以防止启动报错,不清楚,我保持原样 出现了
(OS errno 13 - Permission denied) 错误
6、开启mysql服务
# mysql + centos7/8
systemctl start mysqld
# mysql + centos 5/6
service mysqld start
7、验证结果
用客户端连接mysql,发现数据库存在,查询数据目录位置已经变化;
OS errno 13 - Permission denied 错误处理
迁移后启动服务时报错
运行提示命令检查
错误信息不是很明显,检查MySQL日志
解决方案:
这可能是由于SElinux的安全上下文导致的,可尝试setenforce 0 命令关闭selinux以验证该问题。
[root@localhost ~]# getenforce //查看selinux状态
Enforcing
[root@localhost ~]# setenforce 0 //临时关闭selinux,重启后失效
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# systemctl start mysqld //启动mysql服务成功
如此,可证明确实是由selinux导致的,可尝试:
1、查看一下原本的数据目录的该属性
SELinux安全上下文查看方法(超详细):http://c.biancheng.net/view/1149.html
[root@localhost ~]# ls -Z /var/lib/mysql
#使用选项-Z查看文件和目录的安全上下文
-rw-r--r--.root root system_u:object_r:mysqld_db_t:s0 install.log
-rw-r--r--.root root system_u:object_r:mysqld_db_t:s0 install.log.syslog
2、确定了原来数据目录属性为mysqld_db_t,将你的新datadir属性更改为mysqld_db_t:
chcon -R -t mysqld_db_t <你的新datadir>
3、修改完后,查看你的新datadir的属性,ls -Z <你的新datadir>
若发现存在部分目录属性还不是mysqld_db_t,使用命令(chcon -R -t mysqld_db_t <你的目录>)继续修改
4、使用systemctl start mysqld重启即可。