2014年11月28日金曜日

MySQL slow logのローテーションを安全に行う

https://www.flickr.com/photos/vmos/355693767

MySQL slow logのローテーションを安全に行う方法です。
mysqladmin flush-logsを実行して、ログファイルをまとめて更新する方法もありますが、flush-logsのみならずbinlogファイルまでも更新はさせたくありませんでした。
MySQL 5.5.3移行では各種ログを個別にフラッシュできるようになっているので、これを利用してslow logのみを更新します。

ローテートファイルを作成
# emacs /etc/logrotate.d/mysql-log
/var/lib/mysql/slow.log  {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    dateext
    postrotate
        mysql -uroot -pxxxxxxxxxxxxxxx -e'FLUSH SLOW LOGS'
    endscript
}

logrotateを実行せずにテスト
# logrotate -dv /etc/logrotate.d/mysql-log

logrotateを手動実行
# logrotate -f /etc/logrotate.d/mysql-log

ローテートされたことを確認
# ls -al /var/lib/mysql | grep '\.log'
-rw-rw----   1 mysql mysql       185 Nov 28 10:16 slow.log
-rw-rw----   1 mysql mysql       165 Nov 28 03:48 slow.log-20141127.gz
-rw-rw----   1 mysql mysql       173 Nov 28 10:20 slow.log-20141128.gz

Enjoy!


参考)
MySQL :: MySQL 5.6 Reference Manual :: 13.7.6.3 FLUSH Syntax
http://dev.mysql.com/doc/refman/5.6/en/flush.html