痛いところは煙に巻く

製造業のしがない社内SEが日記代わりにいろいろ書く

Hello,World

Üben Sie es nur recht fleißig, so wird es schon gehen

Windows環境MySQLのクエリログをローテーションする

前任者から引き継いだWindows Server+MySQL5.6のDBサーバがある。なぜLinuxにしなかったのかとぶつくさ言いながら面倒を見ていた。といってもプロセスの監視とかで、何かあったら対応する、ということくらいだった。今回はこのサーバのCPU使用率が急に跳ねたことを受けて原因を調査するつもりでMySQLのslow-queryや実行SQLの確認をしようと思ったところで衝撃的なものを発見した。

実行SQLのログ容量 62GB

一体何行になっているのか、普通のエディタじゃいつまで経っても全部見れないじゃないか。ログを取るのは大事だし、ログが出てないより遥かにマシだが、なんでもかんでも貯めれば良いってもんじゃない。貯まって嬉しいのはお金だけ。ログは定期的に断捨離してもらいたいところだ。断捨離で思い出したけど、事務所の作業スペースに置いてある未使用PCとか段ボールとかもさっさと片付けてほしい。片付けられない奴がそういう修理とか老朽更新とか物質的な業務に携わるべきではないよな!ってその担当に直接言いながら、とりあえず62GBのログは「右クリックしてShift+D」で消した。Windows環境なので、一応set global general_log=0;でログ出力を止めてから消しました。

とはいえ、このままログの出力を再開しても、結局似たように貯まるだけなので、ローテーションさせたい。Linuxじゃないのでlogrotateは使えないぞ!ということでバッチとタスクでなんとかしよう。
本来ならMySQLLinuxで立てるのがベストだと思うが、社内の環境によってはそうもいかないこともある。そんな私のようにWindows環境に苦労させられるエンジニアの諸兄の役に少しでも立つなら幸いだし、また調べるのも面倒なので私のために記録しておく。

ローテーション部分

ログファイル自体は、毎日リネームとか移動時の別名保存とかで記録を残して、ファイル削除で古い順に消していけばOK。とりあえず7日分くらいは確保しておきたい。というより昨日の晩御飯も覚えてないのにそれ以上古い仕事やプログラムのことなんて絶対に覚えてないから7日分くらい記録しておいてもらえばいいです。

ファイル操作の前に

問題は、mysqldがログファイルをつかみっぱなしになってること。なので、ログファイルはそう簡単に移動も削除も名前変更もできない。かといって、DBのサービス自体をそう簡単には止められないので、ログファイルのローテート処理をする前に、下記を実行する。

mysql --defaults-extra-file=hoge.cnf -e "set global general_log=0;"

このコマンドを挟んで実行SQLログの出力をオフにしてみる。MySQL自体のサービスは動いてるので、どうなの?って思ったが、これで実行SQLログを離してくれた。ヒャッホウ!これでMySQLは止めずにログファイルだけ操作できるようになった。煮るなり焼くなり好きにしよう。
mysqlコマンドのdefaults-extra-fileオプションはまた別途書こうとは思うが、ググれば出てくるので調べよう。

ファイル操作の後に

煮るなり焼くなり好きにした後は、もう一度実行SQLログの出力をオンにしよう。オフにしたままなら今までの対応はすべてなかったことになるのでちゃんとオンにしよう。

mysql --defaults-extra-file=hoge.cnf -e "set global general_log=1;"

これでログ出力がオンになれば、my.iniで設定されてるログファイルも自動で生成されるので、またログが記録され続けるので、一安心となる。

まとめ

下記のようなbatファイルを作ろう。

@echo off
REM MySQLログローテーションバッチ
REM ログ出力オフ
mysql --defaults-extra-file=hoge.cnf -e "set global general_log=0;"

REM ローテーション処理(好きなのをどうぞ)

REM ログ出力オン
mysql --defaults-extra-file=hoge.cnf -e "set global general_log=1;"

このバッチをタスクスケジューラでバックアップや他のバッチと被らない時間帯に起動するようにセットして完了。定期的に削除するように作ったので一先ずは余計な肥大はなくなるかな。
結局サーバのCPU使用率が跳ねた調査できなかったな…

スポンサーリンク