このエントリーをはてなブックマークに追加

MySQL の slowlog を logrotate する方法

よく MySQL に発行されている重いクエリーをチューニングするために slowlog を出力すると思います。サービスが成長してくると slowlog は増えていく傾向にあります。毎日、せっせとチューニングしているのは基本中の基本ですが、slowlog が肥大化してしまうとチューニングの結果がだんだんと見えなくなってしまいます。特に mysqldumpslow で解析をしているときなら、過去のクエリーまで分析に含まれてしまったりします。

かなり前置きがなくなりましたが、この slowlog を logrotate する方法をまとめておきます。やり方は、いたってシンプルで /etc/logrotate.d/ に次のファイルを置くだけです。

/var/lib/mysql/mysqld.log /var/lib/mysql/mysql-slow.log  {
# create 600 mysql mysql
notifempty
daily
rotate 30
missingok
compress
postrotate
# just if mysqld is really running
if test -x /usr/bin/mysqladmin && \
/usr/bin/mysqladmin ping &>/dev/null
then
/usr/bin/mysqladmin flush-logs
fi
endscript
}

上の例では MySQL のログと slowlog を logrotate しているので、ログファイル名は環境に応じて変更してください。

この状態で mysqldumpslow した結果を毎日メールで送ると便利かもしれません。

One Comments

Comments are closed.