CentOS 6.4(x64)/MySQL 5.6.10
Instalei o MySQL a partir dos arquivos de origem e iniciei-o corretamente em seu local original (/var/lib/mysql). Mudei tudo para um volume diferente (/u0/mysql) e passei por algumas rodadas isentando-o do SELinux ( cat /var/log/audit/audit.log | audit2allow -M mysql-*
seguido por semodule -i mysql-*.pp
). Após cada rodada, tento reiniciar o serviço e vejo este erro:
Starting MySQL..The server quit without updating PID file (/u0/mysql/server.pid).
[FAILED]
Após 3-4 rodadas adicionando isenções, percebi que os arquivos não estavam mais mudando. Ou seja, tudo o que poderia ser adicionado desta forma já havia sido adicionado. Por curiosidade, corri audit2why -a
e peguei uma série de:
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.
Isso me leva a acreditar quedeveestar trabalhando. Se eu desabilitar o SELinux: setenforce 0
então o mysql iniciará bem, então (SE) ainda estará atrapalhando.
Pesquisando em SF virouesseup - tentei sem nenhuma mudança no resultado.
Então: como faço para descobrir onde está o bloqueio?
EDITAR:
[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
Responder1
Você precisa alterar o contexto de segurança do novo diretório para ser igual a /var/lib/mysql.
Por exemplo:
ls -ldZ /var/lib/mysql/
drwxr-x--x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql/
Em seguida, altere o novo diretório para as mesmas configurações com chcon
chcon -R -u system_u -r object_r -t mysqld_db_t /u0/mysql
Responder2
Você também pode tentar algo assim:
chcon --reference=/path/to/existing/file /path/to/new/file
Aliás, aqui está uma ótima introdução ao SELinux:http://www.youtube.com/watch?v=MxjenQ31b70da Cúpula Redhat 2012. Além disso, procure em seus arquivos de log mensagens de erro em /var/log/audit/audit.log
ou /var/log/messages
.