Этим утром я запустил yum update и оно успешно завершилось. Однако мы заметили, что сервер базы данных не работает. От имени root я запустил:

service mysqld restart

Который дал мне следующую ошибку:

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

И в mysqld.log я вижу следующее:

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

Это намекает мне, что это как-то связано с разрешениями? Двоичные журналы находятся в /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
...

А также:

[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

Я не изменял ни одно из этих разрешений или конфигурацию MySQL вообще. В течение нескольких месяцев все работало нормально, с несколькими перезапусками, использующими перезапуск service mysqld restart .

Мы используем Centos 6.5, сервер MySQL от webatic:

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

Вот моя конфигурация из /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

Обновление: я видел это сообщение в /var/log/audit/audit.log от 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)

Я начинаю думать, что мне нужен какой-то особый контекст в моей папке binary-logs , и, может быть, тот факт, что у меня не было этой проблемы раньше, был из-за того, что она долго не перезагружалась? (Хотя я до сих пор не понимаю, почему это не было бы проблемой при простом service mysqld restart).

Обновление: я добавил ответ, который исправляет проблемы, однако остается вопрос: почему это работало раньше и перестало работать после yum update?

1 ответ1

0

Я не уверен, почему это сработало раньше, но причина, по которой он не запустился, была в SELinux. Контекст для каталога binary-logs был неправильным. Оглядываясь назад на часть вопроса, которая показала ls -alZ исходной папки mysql и добавленную позже binary-logs запись :

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

мы видим, что права пользователя и группы действительно хороши, но контекст SELinux - нет. Запуск следующего:

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

сделал возможным запустить сервер снова. Если кто-то захочет добавить ответ о том, почему он работал до обновления, пожалуйста, не стесняйтесь, и я с радостью приму ваш ответ. Я отредактировал вопрос, чтобы отразить это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .