CentOS 6.4(x64)/ MySQL 5.6.10
从源文件安装MySQL,并在其原始位置(/ var / lib / mysql)下启动它。 我把所有的东西都移到了不同的卷(/ u0 / mysql),然后经过几次SELinux的免除( cat /var/log/audit/audit.log | audit2allow -M mysql-* semodule -i mysql-*.pp cat /var/log/audit/audit.log | audit2allow -M mysql-*接下来是semodule -i mysql-*.pp )。 每一轮之后,我尝试重新启动服务,看到这个错误:
Starting MySQL..The server quit without updating PID file (/u0/mysql/server.pid). [FAILED]
经过3-4轮增加豁免后,我注意到文件没有改变。 IE的所有可以添加这种方式已被添加。 出于好奇,我跑了audit2why -a并得到了一些:
type=AVC msg=audit(1387207317.009:666): avc: <some permission> for pid=20640 comm="mysqld" dev=sdc1 ino=36831373 scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:default_t:s0 tclass=file Was caused by: Unknown - would be allowed by active policy Possible mismatch between this policy and the one under which the audit message was generated. Possible mismatch between current in-memory boolean settings vs. permanent ones.
这使我相信它应该工作。 如果我禁用SELinux: setenforce 0那么mysql就会启动,所以它(SE)仍然在阻碍之中。
通过SF的search扭转了这一点 – 尝试了结果没有改变。
SO:我怎么知道堵塞在哪里?
编辑:
[root@server u0]# ls -ldZ /var/lib/mysql drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /var/lib/mysql [root@server u0]# ls -ldZ /u0/mysql drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /u0/mysql
您需要将新目录的安全上下文更改为/ var / lib / mysql。
例如:
ls -ldZ /var/lib/mysql/ drwxr-x--x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql/
然后使用chcon将新目录更改为相同的设置
chcon -R -u system_u -r object_r -t mysqld_db_t /u0/mysql
你也可以尝试这样的事情:
chcon --reference=/path/to/existing/file /path/to/new/file
顺便说一句,这是一个很好的介绍SELinux: http : //www.youtube.com/watch?v= MxjenQ31b70从红帽2012峰会。 另外,在日志文件中查找/var/log/audit/audit.log或/var/log/messages错误/var/log/messages 。