CentOS7下更改、移动mysql数据存储的位置 附os 错误码13问题

1、看一下目前mysql数据存储的位

select @@datadir;

CentOS7下更改、移动mysql数据存储的位置 附os 错误码13问题_第1张图片
从这个结果我们可以看出,当前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,发现数据库存在,查询数据目录位置已经变化;

CentOS7下更改、移动mysql数据存储的位置 附os 错误码13问题_第2张图片

OS errno 13 - Permission denied  错误处理

迁移后启动服务时报错

运行提示命令检查

 CentOS7下更改、移动mysql数据存储的位置 附os 错误码13问题_第3张图片

错误信息不是很明显,检查MySQL日志

 CentOS7下更改、移动mysql数据存储的位置 附os 错误码13问题_第4张图片

解决方案:

这可能是由于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重启即可。
 

你可能感兴趣的:(mysql,数据库,sql)