前言:
本次操作中,涉及到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那种权限!!