SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【MySQL】バイナリログを自動削除したい(mysql-bin.******)

問題

/var/lib/mysql ディレクトリの中に、 バイナリログ(mysql-bin.******)がどんどんたまっていく。

バックアップを取ったらバイナリログは消えていって欲しい。

手動でやらないとだめ?

答え

こんなオプションがある。

[mysqld]
expire_logs_days = 30

デフォルトは0で、自動削除しない。

上のように設定をすると、バイナリログをフラッシュしたときや再起動のときに古いバイナリログを削除する。

http://dev.mysql.com/doc/refman/5.1/ja/server-system-variables.html

なお、この設定が利用できるようになったのはMySQL4.1.0から。

http://dev.mysql.com/doc/refman/4.1/en/server-system-variables.html#sysvar_expire_logs_days

動作例

何の設定もしていないため、こんな風になっているサーバーがある。バイナリログが溜まっている。

-rw-rw---- 1 mysql mysql        513  3月  4  2010 mysql-bin.000001
-rw-rw---- 1 mysql mysql        125  3月  4  2010 mysql-bin.000002
-rw-rw---- 1 mysql mysql      65552  3月  4  2010 mysql-bin.000003
-rw-rw---- 1 mysql mysql        125  3月  4  2010 mysql-bin.000004
-rw-rw---- 1 mysql mysql        125  3月  4  2010 mysql-bin.000005
-rw-rw---- 1 mysql mysql  149858999  8月  4  2010 mysql-bin.000006
-rw-rw---- 1 mysql mysql 1073838697 12月  4  2010 mysql-bin.000007
-rw-rw---- 1 mysql mysql 1073764322 12月 22 21:55 mysql-bin.000008
-rw-rw---- 1 mysql mysql   65068940  1月 15 02:38 mysql-bin.000009
-rw-rw---- 1 mysql mysql 1073818287  3月 12 10:46 mysql-bin.000010
-rw-rw---- 1 mysql mysql  258316999  3月 23 02:02 mysql-bin.000011
-rw-rw---- 1 mysql mysql        125  3月 23 01:55 mysql-bin.000012
-rw-rw---- 1 mysql mysql        125  3月 23 01:58 mysql-bin.000013
-rw-rw---- 1 mysql mysql        125  3月 23 01:59 mysql-bin.000014
-rw-rw---- 1 mysql mysql        125  3月 23 02:03 mysql-bin.000015
-rw-rw---- 1 mysql mysql 1074550061  4月 11 10:40 mysql-bin.000016
-rw-rw---- 1 mysql mysql 1073771373  4月 27 12:04 mysql-bin.000017
-rw-rw---- 1 mysql mysql 1073793703  5月 12 21:23 mysql-bin.000018
-rw-rw---- 1 mysql mysql 1073742097  5月 24 20:30 mysql-bin.000019
-rw-rw---- 1 mysql mysql  192311103  5月 26 10:20 mysql-bin.000020
-rw-rw---- 1 mysql mysql 1073750496  6月  5 06:50 mysql-bin.000021
-rw-rw---- 1 mysql mysql  433399425  6月  9 18:41 mysql-bin.000022
-rw-rw---- 1 mysql mysql        399  6月  5 06:50 mysql-bin.index
...

バックアップを取った後、expire_logs_days=10(10日間)として、再起動してみた。

こうなった。

-rw-rw---- 1 mysql mysql 1073750496  6月  5 06:50 mysql-bin.000021
-rw-rw---- 1 mysql mysql  476739935  6月 10 06:26 mysql-bin.000022
-rw-rw---- 1 mysql mysql       3555  6月 10 06:26 mysql-bin.000023
-rw-rw---- 1 mysql mysql         57  6月 10 06:26 mysql-bin.index

再起動しないで適用するには

mysqld を再起動しないで、オンラインで設定を適用するには、以下を実行する。

mysql> SET GLOBAL expire_logs_days = 7;

すぐに指定のログを削除するには

以下で削除が可能。

mysql> purge master logs to ‘mysql-bin.010’;

関連するメモ

コメント