mysql slow-logのlogrotate
今まで動いていたログローテーションが動かなくなったので何だと思って調べたら色々はまったのでメモ
$ ls -al /var/lib/mysql -rw-rw---- 1 mysql mysql 0 May 14 04:08 mysql-slow.log -rw-rw---- 1 mysql mysql 7416685154 May 18 11:28 mysql-slow.log-20150514 .... ....
現象は上記のようにファイル名は変わるけど書き込み先が変わらないというもの
結果いつまでも20150514のファイルに書き込みに行くし圧縮もされないしディスク容量も圧迫する
まずはファイルを見てみましょう
- /etc/logrotate.d/mysql
/var/lib/mysql/mysql-slow.log /var/lib/mysql/mysqld.log { # create 600 mysql mysql notifempty daily rotate 3 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 }
パスワード設定
設定自体は悪くなさそうだし、特に変更をしたわけではないのにどうして。。。。
と思っていたらありました、直近でパスワードをrootユーザーに付与しましたw
ローテーション時にパスワードが入力できないのでmysqladminのflush-logsが実行されない
よく見れば/etc/logrotate.d/mysqlにコメントアウトで書いてある。。。
それに従い/root/.my.cnfを設定
- /root/.my.cnf
[mysqladmin] password = passwd user = root
600のパーミッションにもしたし。後は様子を見るだけ。。。。
はい、ダメでしたー
強制実行ではローテーションできるのにcrontabだと実行されない
- 強制実行
logrotate -f /etc/logrotate.d/mysql
環境変数
コンソールで実行できてcronで実行できない、この手のトラブルはよくあるあれですね、環境変数
他の記事にも書いてありましたが(URL忘れた...)
rootユーザのHOMEがうまく読み込まれていないことが原因
なので下記のようにpostrotate実行時に適切な環境変数を設定してあげました
postrotate # just if mysqld is really running + export HOME=/root/ if test -x /usr/bin/mysqladmin && \ }
無事
rotateがされるようになりました、めでたしめでたしw