MySQL のエラーログを削除する際の注意点

とある事情により、 MySQL (バージョンは 5.5.13)の エラーログが溜まってしまったのでパージしようとした時のこと。

さすがに、そのままエラーログを削除するのは拙いよなーと思い、探してみた。

5.1 (日本語版) のマニュアルではだめ

リファレンスを参照すると ref.1 を見つけたので、 FLUSH LOGS を打ってみたところ、エラーログファイルのリネームされず。。。

元のファイル名のまま、エラーが吐き続けられる。

ref.1 FLUSH LOGS (5.1) の解説

もしサーバが --log-error オプションでスタートされたら、それは FLUSH LOGS によって -old のサフィックスを利用して現在のエラー ログ ファイルをリネームし、新しく空のログ ファイルを作成します。もし --log-error オプションがなければリネームは行われません。

(http://dev.mysql.com/doc/refman/5.1/ja/flush.html より抜粋)


まぁ、こいつは 5.1 の解説なので、気を取り直して 5.5 のリファレンスを見てみることにする。

同じ FLUSH 構文のページを参照すると、Section 5.2.2, “The Error Log”を参照しろとあるので、そちらを見る。

5.5 (英語版) のマニュアルを参照、そして解決

ref.2 エラーログのフラッシュについて (5.5)

If you flush the logs using FLUSH LOGS or mysqladmin flush-logs and mysqld is writing the error log to a file (for example, if it was started with the --log-error option), the effect is version dependent:

(http://dev.mysql.com/doc/refman/5.5/en/error-log.html より抜粋)


どうやら、バージョンによって挙動が異なるらしい。

バージョン 5.5.7 からはリネームしなくなったので、手動でリネームしてから FLUSH してね。とのこと。
mv してから、 FLUSH ERROR LOGS (5.5 系なら、エラーログに限定して FLUSH することが出来る) を叩いてやると、無事、切り離されましたとさ。

リネームしただけだと、そのファイルに吐かれ続けるので FLUSH は忘れずに。

念のため、 5.1 (英語)のマニュアルを参照

さて、ふと思うところあって、英語版のマニュアルを参照してみると…… あれ? 5.5と同じ記述が (ref.3)。

日本語のマニュアルだと、リネームされるとの表記しかなかったのだけど、
英語のマニュアル見ると、 5.1.51 からはリネームされなくなっているとの表記があることが分かる。

5.1系では実際に試してないけど、たぶん英語版が正しいんじゃないかなぁ。
日本語のマニュアルは更新されないままの箇所がちらほら見受けられるし。

ref.3 エラーログのフラッシュについて (5.1)

If you flush the logs using FLUSH LOGS or mysqladmin flush-logs and mysqld is writing the error log to a file (for example, if it was started with the --log-error option), the effect is version dependent:

(http://dev.mysql.com/doc/refman/5.1/en/error-log.html より抜粋)

まとめ

  • FLUSH (ERROR) LOGS 実行時の挙動はバージョンによって異なるので注意。
    • 5.5 系の場合
      • 5.5.7 以降 : リネームなしで再オープン
      • 5.5.7 より前 : それまでのログをリネーム (末尾に -old ) して従来のファイル名で再オープン
    • 5.1 系の場合
      • 5.1.51 以降 : リネームなしで再オープン
      • 5.1.51 より前 : それまでのログをリネーム (末尾に -old ) して従来のファイル名で再オープン
  • 正しいバージョンのマニュアルを参照しよう。
  • 日本語版は参考にとどめて、英語版のマニュアルをちゃんと見よう。