2007年1月26日金曜日

MySQLのバイナリログを削除する

自分が開発したLAMPのシステムに異変発生。

普通にアクセスできるものの、データの登録や更新ができない。つまり、selectはOKだけとinsertやupdateがNG。

この時点でだいたい原因は想像できた。サーバーにログインして「df -h」をしてみると、やっぱり、/varディレクトリが100%になっている。つまりMySQLが更新ログ(バイナリログ)をディスクに書き込めず、処理ができなかったというわけだ。

よく見てみると、「/var/lib/mysql/DB名.log」というファイルが肥大しまくっている。実は、開発時にデバッグ用にmy.cnfでlogオプションを有効にしており、本番運用開始後もずっとそのままだったのが原因。

さっそくログファイルを削除し、my.cnfのlogオプションをコメントアウトしてmysqlを再起動。問題は無事、解消されました。

ひとまず一件落着なんですが、同じディレクトリにあるバイナリログを見てみると、なんと116までログが増えていた。こちらも合計するとかなりのサイズなので、削除することに。

バイナリログ処理関連の構文はこちらに載ってます。
http://dev.mysql.com/doc/refman/4.1/ja/replication-master-sql.html

ひとまず、昨年末までの分を削除。
mysql> PURGE MASTER LOGS BEFORE '2006-12-31 23:59:59';

これでバイナリログがごっそり消えてすっきり。/varディレクトリの空きもぐっと増えました。
ついでに、日付指定をしないで全部のバイナリログを消す場合はRESETを使います。
mysql> RESET MASTER;

それから、今回のようなログ肥大化を防ぐために、my.cnfに下記を追加しました。
expire_logs_days = 7
7日以上経った古いバイナリログは削除する、という設定です。

詳細はこちら↓
http://www.limy.org/program/db/mysql/mysql_variables.html

0 件のコメント:

コメントを投稿