通常、MySQLのbinlogはexpire_logs_days
で指定した日数を超えたものを削除しているでしょう。
ただ、それでは1日より細かい単位での指定はできません。
もし数時間単位で消したい場合はPURGE MASTER LOGS
構文を使います。
#####指定したbinlog以前を削除
PURGE MASTER LOGS TO 'mysql-bin.010000';
mysql-bin.010000以前のbinlogを削除。
#####指定した日時以前を削除
PURGE MASTER LOGS BEFORE '2014-06-25 22:46:26';
2014年06月25日22時46分26秒以前のbinlogを削除。
ただこれでは直接指定なのでバッチ処理には向かない。
###指定した時間より古いbinlogを削除
PURGE MASTER LOGS BEFORE NOW() - INTERVAL 3 HOUR;
3時間以上経ったbinlogを削除。ちなみにDAYでもできるらしい。
これを使って以下のような簡単なスクリプトを作ってcronに登録します。
FLUSH LOGS;
PURGE MASTER LOGS BEFORE NOW() - INTERVAL 3 HOUR;
mysql -uroot < purge.sql
30 * * * * /usr/local/sbin/purge.sh
binlogは基本的にバックアップマシンで保存しているのでライトに削除。
これで例え大量にアクセスのくるデータベースでも繊細な容量管理ができますね。
####参考
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.6.1.1 PURGE MASTER LOGS 構文
http://dev.mysql.com/doc/refman/5.1/ja/purge-master-logs.html
logging - Can expire_logs_days be less than 1 day in MySQL? - Server Fault
http://serverfault.com/questions/179165/can-expire-logs-days-be-less-than-1-day-in-mysql