为什么 yum 更新后 mysqld 无法启动?

为什么 yum 更新后 mysqld 无法启动?

今天早上我运行了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,来自 webatic 的 MySQL 服务器:

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

我不确定它之前为什么能工作,但它无法启动的原因曾是归结于 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

使得重新启动服务器成为可能。如果有人想补充关于它为什么有效的答案更新后请随意,我很乐意接受您的回答。我已编辑问题以反映这一点。

相关内容