MySQL - ログローテート

MySQLのログってnewsyslogなんかに記述しても上手くローテートしてくれません。

新しいログファイルの使用を MySQL に強制するには、mysqladmin flush-logs を使用する必要があります。

Linuxのrpmなんかだと、ローテート用のプログラムが用意されてるみたいなんですが、

FreeBSDはそんなのないので、簡単なシェルを書いてCronで実行するような処理が必要になります。

MySQLのログをローテート

/etc/newsyslog.confに記述。

今回は一週間分、圧縮せずにローテートするよう記述。

 # vi /etc/newsyslog.conf
 -----------------追加--------------------
 /var/log/mysql/mysql.log                660  7    *    @T00   B
 -----------------追加--------------------

/etc/crontabにパーミッション変更とMySQLのflush-logsを実行。

 # vi /etc/crontab
 01 0 * * * root /usr/sbin/chown mysql /var/log/mysql/mysql.log ; /usr/local/bin
 /mysqladmin -u root -p[MySQLのrootパスワード] flush-logs

※root -p[MySQLのrootパスワード]の個所は-pの後にスペースは入れないようにする。