CentOS6 更改MySQL默认数据库路径,关键在SELINUX

    在CentOS中修改MySQL默认数据库路径,网上介绍很多,只需要修改 /etc/my.cnf 和 /etc/init.d/mysqld,将新目录所有者改为mysql:mysql,很简单。但是改后重启mysqld却总是失败,/var/log/mysqld.log 提示mysqld没有权限访问目录,如下:
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.

    想来想去想起了 SELINUX,呵呵,搜了一下找到了方法,其实就是一两条指令的事儿。

    CentOS使用 yum install mysql-server后,默认数据库目录是 /var/lib/mysql,假如我们要把数据库目录改到 /opt/mysql,下面是全过程。

1. 停止 mysqld
# service mysqld stop

2. 修改配置文件
# vi /etc/my.cnf
[mysqld]
# datadir=/var/lib/mysql
datadir=/opt/mysql

# vi /etc/init.d/mysqld
# get_mysql_option mysqld datadir "/var/lib/mysql"
get_mysql_option mysqld datadir "/opt/mysql"

3. 复制数据库文件到新的目录并更改所有者
# cp -r /var/lib/mysql /opt/
# chmod -R mysql:mysql /opt/mysql

4. 这时候如果运行 # service mysqld start 不会成功的,因为要对付SELINUX。有两种办法:
1)关闭SELINUX
SELINUX默认是启用的,可以用 # setenforce 0 关闭 SELINUX(启用SELINUX:# setenforce 1)。
把指令加到系统默认启动里面(“>>” 表示追加到文件中):
# echo "setenforce 0" >> /etc/rc.local

2)启用SELINUX
我们还是希望SELINUX提供系统安全性,那么就要修改目录的SELINUX上下文:
# chcon -R -t mysqld_db_t /opt/mysql

然后再启动 mysqld 就可以了。

原数据目录(/var/lib/mysql)中只需要保留 mysql.sock,剩下的文件在确认数据库完全正常后就可以删除了。

顺便记录一下SELINUX的其他参数:
# chcon -R -h -t httpd_sys_content_t /www/web/
# chcon -R -t samba_share_t /path

(参考 http://topic.csdn.net/u/20100419/16/a1929b50-de24-4346-87ee-659a65668960.html ,在#10)

原文地址:https://www.cnblogs.com/panblack/p/change_default_mysql_data_directory.html