MySQL5.5から5.7に以降した時、playbookがコケてmysqlが立ち上がらなくなったので調査しました。
oppai@test:~$ sudo service mysql start
.................................................................................................................................................................................... * MySQL Community Server 5.7.18 did not start. Please check logs for more details.
oppai@test:~$ sudo mysqld_safe
2017-04-18T09:08:20.732801Z mysqld_safe Logging to '/var/log/mysql.err'.
2017-04-18T09:08:20.748330Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
2017-04-18T09:08:20.905812Z mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
oppai@test:~$
straceで見てるとmysql.errの書き込みで怒られてるのを発見。
open("/var/log/mysql.err", O_WRONLY|O_CREAT|O_APPEND, 0666) = -1 EACCES (Permission denied)
open("/var/log/mysql.err", O_WRONLY|O_CREAT|O_APPEND, 0666) = -1 EACCES (Permission denied)
open("/var/log/mysql.err", O_WRONLY|O_CREAT|O_APPEND, 0666) = -1 EACCES (Permission denied)
でも、権限はあってそう、なぜ?
oppai@test:~$ ll /var/log/mysql.err
-rw-r----- 1 mysql mysql 1590 Apr 18 09:03 /var/log/mysql.err
MySQL5.7のドキュメントにちゃんと書いてました。どうやら、MySQL5.7から書込み可能なディレクトリにerrorログを入れないといけないようです。apt等で入れたときのデフォルトでは log-error=/var/log/mysql.err
になってますが、 log-error=/var/log/mysql/mysql.err
にすればOKでした。
https://dev.mysql.com/doc/refman/5.7/en/error-log.html
It is common for Yum or APT package installations to configure an error log location under /var/log with an entry like log-error=/var/log/mysqld.log in a server configuration file. Removing the file name from the entry causes the default log file to be used, which is written to the data directory.