MySQLバイナリログ保存期間をオンラインのまま変更

  • 投稿日:
  • by
  • カテゴリ:

logo-mysql-170x115
今回はMySQLの超小ネタ。

バイナリログ出力を設定していると日々変更ログがたまっていくわけですが、一定期間分だけ保存するよう設定しないと無尽蔵に増えていってしまいます。その制御をするパラメータが expire_logs_days です。

何も指定してないとデフォルト値 0 になっていて永久に保存になってますが、整数値を指定すればその日数の分だけ保管され、それ以上過去のものは自動的に削除されるようになります。

例: expire_logs_days が 7 だと7日間分のバイナリログだけ保存される

expire_logs_days はマニュアルを見ると「Dynamic Variable: Yes」とあるのでオンライン(起動中)で変更可能です。やってみましょう。

# mysql 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.46-log MySQL Community Server (GPL) by Remi

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW GLOBAL VARIABLES like 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 14    |
+------------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL expire_logs_days = 7;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GLOBAL VARIABLES like 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 7     |
+------------------+-------+
1 row in set (0.00 sec)

mysql> 

ということで、保存期間を14日から7日に変更できました。

バイナリログのローテーションタイミングは再起動時かログ最大サイズ(max_binlog_size)超えたときのどちらかに限定されるため、すぐにログファイル削除はされませんが時間をおいて確認しておきましょう。

ちなみに再起動時にも反映されるよう my.cnf ファイルの変更も忘れずに。