Por que o mysqld não inicia após uma atualização do yum?

0

Esta manhã corri yum update e foi concluída com sucesso. Percebemos, no entanto, que o servidor de banco de dados não estava em execução. Como root, eu corri:

service mysqld restart

O que me deu o seguinte erro:

[root@ombrelle ~]# service mysqld start
MySQL Daemon failed to start.
Starting mysqld:                                           [FAILED]

E em mysqld.log , vejo o seguinte:

141106 08:31:09 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
/usr/libexec/mysqld: File '/var/lib/binary-logs/binary-log.index' not found (Errcode: 13)
141106  8:31:09 [ERROR] Aborting

141106  8:31:09 [Note] /usr/libexec/mysqld: Shutdown complete

141106 08:31:09 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Isso indicaria para mim que é algo relacionado a permissões? Registros binários estão localizados em /var/lib/binary-logs .

[root@ombrelle ~]# ls -alZ /var/lib/
...
drwxr-xr-x. mysql   mysql  unconfined_u:object_r:var_lib_t:s0 binary-logs
...
drwxr-xr-x. mysql   mysql  system_u:object_r:mysqld_db_t:s0 mysql
...

E:

[root@ombrelle ~]# ls -alZ /var/lib/binary-logs/*.index
-rw-rw----. mysql mysql unconfined_u:object_r:var_lib_t:s0 /var/lib/binary-logs/binary-log.index

Eu não modifiquei nenhuma dessas permissões ou a configuração do MySQL. Tudo está funcionando bem há meses, com algumas reinicializações usando service mysqld restart nesse período.

Estamos executando o Centos 6.5, servidor MySQL da webatic:

mysql55w-server.x86_64                     5.5.40-1.w6                 @webtatic

Aqui está minha configuração de /etc/my.cnf :

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0

# replicate (almost) everything...
replicate-wild-ignore-table=mysql.%

# ...but don't pass dev databases on
binlog-do-db=somedb

server-id=666
report-host=ourhost.co.uk
log-bin=/var/lib/binary-logs/binary-log
binlog_format=MIXED
log-slave-updates=1

Atualização: vi esta mensagem em /var/log/audit/audit.log do SELinux:

type=AVC msg=audit(1415263841.315:946413): avc:  denied  { read write } for  pid=49196 comm="mysqld" name="binary-log.index" dev=md2 ino=5646260 scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=unconfined_u:object_r:var_lib_t:s0 tclass=file
type=SYSCALL msg=audit(1415263841.315:946413): arch=c000003e syscall=2 success=no exit=-13 a0=f974c0 a1=42 a2=1b0 a3=fffffffffffffffd items=0 ppid=48629 pid=49196 auid=0 uid=27 gid=27 euid=27 suid=27 fsuid=27 egid=27 sgid=27 fsgid=27 tty=pts5 ses=8098 comm="mysqld" exe="/usr/libexec/mysqld" subj=unconfined_u:system_r:mysqld_t:s0 key=(null)

Estou começando a achar que preciso de algum contexto específico na minha pasta binary-logs , e talvez o fato de não ter esse problema fosse porque ele não foi reinicializado há muito tempo? (Embora eu ainda não entenda porque isso não teria sido um problema com um simples service mysqld restart ).

Atualização: Eu adicionei uma resposta que corrige os problemas, mas a questão permanece: por que isso funcionou antes e parou de funcionar depois que eu executei yum update ?

    
por Leonard Challis 06.11.2014 / 09:42

1 resposta

0

Não sei por que isso funcionou antes, mas o motivo pelo qual não foi iniciado foi para o SELinux. O contexto para o diretório binary-logs estava errado. Olhando para trás, para a parte da pergunta que mostrou a ls -alZ da pasta mysql original e a última adicionada binary-logs one:

drwxr-xr-x. mysql   mysql  unconfined_u:object_r:var_lib_t:s0 binary-logs
drwxr-xr-x. mysql   mysql  system_u:object_r:mysqld_db_t:s0 mysql

vemos que as permissões de usuário e grupo são boas, mas o contexto do SELinux não é. Executando o seguinte:

chcon -R -u system_u -r object_r -t mysqld_db_t

tornou possível iniciar o servidor novamente. Se alguém quiser adicionar uma resposta sobre por que funcionou antes da atualização, por favor sinta-se à vontade e aceitarei sua resposta com prazer. Eu editei a pergunta para refletir isso.

    
por 06.11.2014 / 10:05