无法更改 mysql 数据文件夹 CentOS 6

无法更改 mysql 数据文件夹 CentOS 6

我有一台安装了 CentOS 6.3 和 Mysql 的服务器。我创建了两个分区,一个用于系统,较大的一个用于安装在 /data 中的数据。安装 Mysql 后,我创建了目录 /data/mysql,然后以 root 身份更改了此文件夹的 selinux 上下文,chcon -R -t mysqld_db_t /data/mysql并将 Mysql 配置文件 (my.cnf) 修改为:

[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
user=mysql
symbolic-link=0

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

但现在我无法启动 mysqld 服务!它给我 Can't change dir to /data/mysql (errcode 13)

这是的输出ls -Z /data | grep mysql

drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql

奇怪的是,每次我尝试启动 mysqld 服务时,它都会失败,myslq 目录的上下文变为,system_u:object_r:default_t:s0并且在其中创建两个目录(mysql 和 test)。

无论如何,如果我禁用 selinux,一切都会顺利进行......

答案1

你需要使用semanage fcontext为 MySQL 数据库的非标准位置设置默认文件上下文。

semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"

完成后,使用restorecon修复任何标记错误的文件/目录:

restorecon -r -v /data/mysql

现在您应该不会再遇到任何 SELinux 问题。

答案2

我有同样的问题,并且已经解决了:

问题在于权限,my.cnf 使用用户 mysql 执行 mysqld [mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
用户=mysql
符号链接=0

然后我将使用的 mysql 文件和引用移到 /var/lib/mysql/ 各处,然后我修改了:

/etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# 默认使用旧密码格式,以兼容 mysql 3.x
# 客户端(使用 mysqlclient10 兼容包的客户端)。old_passwords
=1
# 建议禁用符号链接以防止各种安全风险;
# 为此,请取消注释此行:
# symbolic-links=0
[mysqld_safe]
log-error=/var/lib/mysql/mysqld.log
pid-file=/var/lib/mysql/mysqld.pid

/etc/init.d/mysqld

get_mysql_option mysqld datadir "/var/lib/mysql"
datadir="$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"
socketfile="$result"
get_mysql_option mysqld_safe log-error "/var/lib/mysql/mysqld.log"
errlogfile="$result"
get_mysql_option mysqld_safe pid-file "/var/lib/mysql/mysqld.pid"
mypidfile="$result"
.
.
.
fi [ $ret -eq 0 ] && touch /var/lib/mysql/mysqld.lock (这个和另一个对锁文件的引用。)
return $ret

我改了名字mysql锁定文件mysqld.lock在 /etc/init.d/mysqld 中但不是必需的。

最后我改变了 /var/lib/mysql 的所有者 chown mysql:mysql /var/lib/mysql -R

并设置权限:

chmod 755 /var/lib/mysql -R

现在

/etc/init.d/mysqld启动

相关内容