MySQLでバイナリログを削除したら立ち上がらなくなったので直す。
さて以前、『MySQLのバイナリログが、ディスクを圧迫していたのです。』を書きました。
設定ファイル my.cnf に、例えば
で、手動でバイナリログを削除したいとき。正式には、コマンドラインから root ユーザとして mysql を立ち上げて、
はいその通り。現在のバイナリログのファイル名を格納しているのが mysql-bin.index というファイルです。ログが保存されるディレクトリに mysql-bin.index が見つかる筈。
mysql-bin.index 内に「存在するよ」と書かれているログファイルが、実際には存在しない(だって rm コマンドで消しちゃったんだもん)のでエラーになるのです。
なので、このエラーを回避するには、実際には存在しないバイナリログファイルの名前を mysql-bin.index から削除してやれば良いのです。
これで無事、MySQL が立ち上がってくれる筈。
要は、横着しないできちんと操作すれば、無駄なエラー対処も必要無い…ということですな。
設定ファイル my.cnf に、例えば
log-bin=mysql-bin
expire_log_days=7
と書いてやれば、バイナリログはデフォルトディレクトリに保存され、7日前より古いログは順次消去されます。これはこれで問題なし。expire_log_days=7
で、手動でバイナリログを削除したいとき。正式には、コマンドラインから root ユーザとして mysql を立ち上げて、
mysql> PURGE MASTER LOGS BEFORE '2012-03-03 23:59:59' ;
とか、mysql> PURGE MASTER LOGS TO 'mysql-bin.000030' ;
とか、全消ししたいならばmysql> RESET MASTER ;
してやれば安全安心なのだけれど、もう面倒なので保存先ディレクトリに行って rm で消してしまえ! と、やや無茶なことを実行してみたら、MySQL が立ち上がらなくなった。Manager of pid-file quit without updating file.
というエラーメッセージを吐くのだが、意味が判らない。エラーログを見てみると、[ERROR] Failed to open log (file './mysql-bin.000030', errno 2)
[ERROR] Could not open log file
[ERROR] Can't init tc log
[ERROR] Aborting
…ということなのね。ログファイルが見つからないので立ち上がらない。ログファイルそのものを削除しても、どこか別の場所に、そのファイル情報が保存されたまま残っているだな。[ERROR] Could not open log file
[ERROR] Can't init tc log
[ERROR] Aborting
はいその通り。現在のバイナリログのファイル名を格納しているのが mysql-bin.index というファイルです。ログが保存されるディレクトリに mysql-bin.index が見つかる筈。
mysql-bin.index 内に「存在するよ」と書かれているログファイルが、実際には存在しない(だって rm コマンドで消しちゃったんだもん)のでエラーになるのです。
なので、このエラーを回避するには、実際には存在しないバイナリログファイルの名前を mysql-bin.index から削除してやれば良いのです。
これで無事、MySQL が立ち上がってくれる筈。
要は、横着しないできちんと操作すれば、無駄なエラー対処も必要無い…ということですな。
コメント