前言:

本次操作中,涉及到SELinux的相关配置,如果系统是最小化安装的话,需要yum安装policycoreutils-python包(SELinux相关),和vim包(比vi强大点,方便编辑),还有当然就是mysql-server包。

首先我们看下默认的mysql的配置

[root@test ~]# vim /etc/my.cnf

内容如下:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

可以看到,默认的数据目录是/var/lib/mysql,默认的socket为/var/lib/mysql/mysql.sock

下面,我们把我的第二块硬盘挂载下,挂载目录在/mnt/sdb目录下,点击查看挂载方法

在sdb目录下建立mysql文件夹,用来存放mysql数据文件和socket

[root@test ~]# mkdir /mnt/sdb/mysql

编辑/etc/my.cnf文件,把datadir和socket分别改为

datadir=/mnt/sdb/mysql
socket=/mnt/sdb/mysql/mysql.sock

再把原来的里面的文件复制到新目录去

[root@test lib]# cp -avx /var/lib/mysql/ /mnt/sdb/

启动mysql

[root@test mysql]# service mysqld start

提示

MySQL Daemon failed to start.
正在启动 mysqld:                                          [失败]

看看日志

150914 15:02:40 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
150914 15:08:24 mysqld_safe Starting mysqld daemon with databases from /mnt/sdb/mysql
150914 15:08:24 [Warning] Can’t create test file /mnt/sdb/mysql/test.lower-test
150914 15:08:24 [Warning] Can’t create test file /mnt/sdb/mysql/test.lower-test
/usr/libexec/mysqld: Can’t change dir to ‘/mnt/sdb/mysql/’ (Errcode: 13)
150914 15:08:24 [ERROR] Aborting

看看原来目录的SELinux权限

[root@test mysql]# ll -Zd /var/lib/mysql/

drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql/

看看当前目录的SELinux权限

[root@test mysql]# ll -Zd /mnt/sdb/

drwxr-xr-x. root root system_u:object_r:file_t:s0 /mnt/sdb/

那我们改成一样的权限

[root@test mysql]# chown mysql:mysql /mnt/sdb/
[root@test mysql]# semanage fcontext -a -t mysqld_db_t "/mnt/sdb(/.*)?"
[root@test mysql]# restorecon -rv /mnt/sdb

再次启动mysql服务,终于OK了。

==,问题没完,用客户端登录mysql试试!

[root@test mysql]# mysql -uroot -p

输入密码,提示

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

看到没,我们服务端指定socket了,但客户端没反应过来 ,还用老的socket连接,当然连不上!

继续编辑配置文件/etc/my.cnf

在最上面加上这些

[client]
port=3306
socket=/mnt/sdb/mysql/mysql.sock

再连接下,提示成功了。

Welcome to the MySQL monitor. Commands end with ; or \g.
…….

如果需要指定编码,例如utf-8编码,在my.cnf上添加

[server]
character-set-server=utf8

这样的话,编码就指定好了。

总之,更改数据库的目录,除了目录本身的权限要对,这里我们用cp -avx 命令保留了原来的权限结构,所以默认就已经对了。数据目录的父级目录也很重要,至少像drwxr-xr-x. root root system_u:object_r:file_t:s0 /mnt/sdb/这样的权限结构肯定不行的。我们改成的是这样的权限结构drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql/,就可以打开了,有时候改成drwxr-xr-x. apache apache system_u:object_r:httpd_sys_content_t:s0 /mnt/sdb/这样的apache的权限,也行,记住,不能是root那种权限!!

 

CentOS6+SElinux环境下变更MySQL的data目录

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注