Home

技術系のメモと日々の雑感

mysqlbinlog の出力をリアルタイムで監視するには

MySQL でレプリケーションを組んだときに、バイナリログが急激に増えていくという現象が発生。
結局、cron で1日1回走らせていたプログラムがループして、更新がかかり続けていたというオチだった。
せっかくなのでこのときやったことをまとめておく。
こういう現象の原因を調べるにはクエリログを吐かせるのがいちばん簡単なんだろうけど、実運用しているサーバだったので負荷を上げたくないという理由で却下。
mysqlbinlog の出番だ。

mysqlbinlog --no-defaults mysql-bin.000015 | tail -f

これで出力を見張ってられるかと思ったら、ログへの出力が発生した時点でコマンドが終了してしまった。
man tail してみたら、-f オプションはパイプの場合は無視されるんだね。
普段こういう使い方をしないから気づかなかったな〜。
あきらめるわけにはいかないので強引な方法でいくことにした。

watch 'mysqlbinlog --no-defaults mysql-bin.000015 | tail'

これで一応ログの末尾を見張ることができる。
tail -f みたいに表示が流れていかないので見にくいけど。

watch -d -n 10 'mysqlbinlog --no-defaults mysql-bin.000015 | tail -n 30'

という風に実行したら少しはマシかな。
まぁ、こんなのでも max_binlog_size を小さくしておけば使えないことはないね。

この記事に対するトラックバック

この記事のトラックバックURL

この記事に対するコメント

この記事にコメントする

管理者にだけ表示を許可する