概要
レンタルしているサーバーがメンテナンスされることになったため、サーバーを一時停止。
メンテナンス後、サーバーを起動したらなぜかMySQLが起動していない・・・
ログを見てみても、一時停止まではログに記載されていて、それからの再開処理はどこにも書かれてない・・・
とりあえず直接コマンドをたたいて(sudo mysqld
)みたところ、以下のことを言われます。
[ERROR] Fatal error: Please read “Security” section of the manual to find out how to run mysqld as root!
というわけで、開始です。
なお手元の環境は
CentOS 6
MySQL 5.7
になっております。
そもそもこのエラーって何よ
[ERROR] Fatal error: Please read “Security” section of the manual to find out how to run mysqld as root!
雑に翻訳すると「mysqldをrootで動かしたかったらマニュアルの「Security」を読んでね!」とのこと。
そういうわけで読みに行きます。
6.1.5 How to Run MySQL as a Normal User
再び雑に翻訳すると「rootユーザーでの実行は禁止! そのかわりrootでもmy.cnfに書くか、--user={user_name}に一般ユーザーを指定するとそのユーザーを使って起動するよ!」と書いてあります。
いちいち設定するのも面倒なので、my.cnfに書きに行きましょう。
すでにmysqlというユーザーがサーバー内に存在することを確認後、以下を追記します。
[mysqld]
...(いろいろ書いてある)
user=mysql
というわけでもう一度sudo mysqld
。少なくともSecurityについては言われなくなるかと思われます。
余談:ところで何が問題だったの?
さて、それではと勇んでservice mysqld start
を行ったところ、やっぱり起動しない…
ログを見てみたところ、ログにも何も書き込まれていない…
ふと、思い立ってログの権限を確認してみたところ、なんとroot
というわけで、chown mysql:mysql mysql.log
を実行。そうしてもう一度実行したところ、今度はログが記載されました。
can't create/write to mysql.pid
pidってのが触れないようです。
もしや・・・と疑いながら今度はpidに対してchown mysql:mysql mysql.pid
実行後serviceから起動したら、mysqldが正常に起動されました。
そしてその後、 /etc/init.d/mysqld
を確認したら、開始ユーザーにもきちんと --user=mysql
の記載が。
どうもmysql5.7、導入方法によっては初回起動がrootでされてしまい、そのままrootユーザーとして各種ファイルを作りながら実行成功してしまうようです。
そして再起動したときに改めてmysqlユーザーで起動し、各種ファイルにパーミッションエラーで弾かれる、と。あほの子かな?
そんなわけで、よくわからないエラーは解決しました。
とりあえず、logのパーミッションを疑うところから始めよう!という教訓でした。