无法用SELinux启动Mysql

我正尝试在CentOS 6上用SELinux启动MySQL,但是我收到以下错误。

131212 09:08:08 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 131212 09:08:58 mysqld_safe Starting mysqld daemon with databases from /u/mysql 131212 9:08:58 [Warning] Can't create test file /u/mysql/webserver.lower-test 131212 9:08:58 [Warning] Can't create test file /u/mysql/webserver.lower-test ^G/usr/libexec/mysqld: Can't change dir to '/u/mysql/' (Errcode: 13) 131212 9:08:58 [ERROR] Aborting 

我们已经设置了许多其他服务器的MySQL,但是这里的区别在于mysql的datadir与标准的/vat/lib.mysql不在一个分区。 相反,它在/ u / mysql中。

这是/etc/my.cnf

 [mysqld] datadir=/u/mysql user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 max_allowed_packet = 32M [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 

这里是mysql目录的权限

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

这里是/ u / mysql目录中directorie的权限之一

 drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 databasefolder 

有没有人有任何想法如何解决这个问题? 我可以确认closuresSELinux解决了这个问题,所以它必须是某种SELinux权限问题。

谢谢

要开始的地方是查看你的/var/log/audit/audit.log AVC denied消息与mysqld有关。 这些可以传递给audit2why收集更多的信息,以帮助您决定做什么。

你有你的mysql文件在一个非标准的位置,虽然目录有正确的上下文,但它们中的文件可能不是。 实现这个目的的最好方法是为/ u / mysql目录添加一个新的fcontext

 semanage fcontext -a -t mysqld_db_t "/u/mysql(/.*)?" restorecon -rv /u/mysql 

semanage命令configuration策略,以便后续的restorecon命令不会将上下文设置回系统默认值。

我的同事build议,最终解决这个问题。

你可以看到人类可读的拒绝原因

 audit2why -a 

生成新的策略模块使用

 audit2allow -a -M <policyname> 

如果你没有发现错误

 yum install policycoreutils-python pschaff 

https://www.centos.org/forums/viewtopic.php?t=8935