つい先程、MariaDB-10.1.21にアップデートしたらmysqlが起動しなくなりました。以下のようなエラーになります。
# service mysql start Starting MySQL.170120 15:39:55 170120 15:39:55 mysqld_safe Logging to '/var/log/mysqld.log'. 170120 15:39:55 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql /usr/bin/mysqld_safe_helper: Can't create/write to file '/var/log/mysqld.log' (Errcode: 13 "Permission denied"). [FAILED]
これはマズい。非常にマズい。
というわけでググってみたら、こういうページがヒットしました。 http://www.rootusers.com/how-to-fix-mariadb-10-0-29-selinux-update-failure/
内容を抜粋すると、
Great, so it’s an SELinux issue.
というわけで、SELinuxの問題のようです。
上記ページではCentOS7で発生したと書いてありますが、僕の手元では一部のCentOS6のみで発生し、CentOS7は問題なく起動しています。
- 僕の手元のCenOS7ではmysqld_safe_helperを用いた起動ではなかったために、問題が起きないのだと思われます。
- 同じCentOS6でも、問題が起こる場合と起こらない場合があるようです。どちらもmysqld_safe_helper経由での起動ですが、何が違うのかは不明。
解決方法 → mysqld_safeのSELinuxコンステキストを変更
上記ページによると、解決するには
# ausearch -c 'mysqld_safe_hel' --raw | audit2allow -M my-mysqldsafehel # semodule -i my-mysqldsafehel.pp
を実行せよとあります。とりあえず実行してみるとこうなりました。
bash: audit2allow: command not found
ナンテコッタイ。というわけで
yum install policycoreutils-python
を実行したのですが、
================================================================ Package Arch Version ================================================================ Installing: policycoreutils-python x86_64 2.0.83-30.1.el6_8 Installing for dependencies: audit-libs-python x86_64 2.4.5-3.el6 libselinux-python x86_64 2.0.94-7.el6 libsemanage-python x86_64 2.0.43-5.1.el6 setools-libs x86_64 3.3.7-4.el6 setools-libs-python x86_64 3.3.7-4.el6 Transaction Summary =============================================================== Install 6 Package(s)
という風にいろいろインストールされてしまうので、なんか嫌な感じ。
余計なものをインストールせずに何とかならんのか。 というわけで、まずは当該ファイルを見てみます。
# cd /usr/bin # ls -Z mysql*
するとこうなりました。
# ls -Z mysql* -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqlaccess -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqladmin -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqlbinlog -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqlbug -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqlcheck -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_config -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_convert_table_format -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqld_multi -rwxr-xr-x. root root system_u:object_r:mysqld_safe_exec_t:s0 mysqld_safe -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqld_safe_helper -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqldump -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqldumpslow -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_embedded -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_find_rows -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_fix_extensions -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqlhotcopy -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqlimport -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_install_db -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_plugin -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_secure_installation -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_setpermission -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqlshow -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysqlslap -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_tzinfo_to_sql -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_upgrade -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_waitpid -rwxr-xr-x. root root system_u:object_r:bin_t:s0 mysql_zap
はい、mysqld_safeだけSELinuxのコンテキストが違いますね。 そこで、おもむろに
# chcon system_u:object_r:bin_t:s0 mysqld_safe
とやってみると…
# service mysql start Starting MySQL.170120 15:54:04 mysqld_safe 170120 15:54:04 mysqld_safe Logging to '/var/log/mysqld.log'. 170120 15:54:04 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql [ OK ]
この通り無事に起動したのでした。こやつめ、ハハハ。
まあ15分ほどで解決できたので良しとします。