« 2007年07月 | メイン | 2007年09月 »

2007年08月23日

MySQL バイナリログのローテートファイルサイズを変更したい

MySQLバイナリログの自動削除設定については、以前書きましたが、ローテートのファイルサイズを指定できることが(最近)わかりました。

ローテートのファイルサイズは、システム変数 max_binlog_size で指定します。
デフォルトでは1GBです。
/etc/my.cnf の[mysqld]ブロックに記述し、mysqldを再起動すると反映されます。
以下、200MBに変更する場合。

-- /etc/my.cnf
[mysqld]
...
max_binlog_size = 209715200
--

mysqldを停止できないときは、SET GLOBAL構文でシステム変数を変更します。

# mysql -u root -p

まず、現在の設定値を確認。

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

設定変更。

mysql> SET GLOBAL max_binlog_size=209715200;

再度確認。

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


ディスクストレージ単価が下がった今となっては、デフォルトの1GBでも問題ないでしょう。
ですが、稼働中のサービスを停止できない状況で、データ・ログ領域が容量の少ないパーティションに割り当たっていてディスクを圧迫しているときは、ローテートファイルサイズ設定と自動削除設定で、うまく回避できます。


(参考)MySQL4.1リファレンスマニュアル
http://dev.mysql.com/doc/refman/4.1/ja/show-variables.html


(2007/09/06補足)
FLUSH LOGS文を使用すると、バイナリログを直ちに新規のログにローテートすることができます。
(さっき知りました)

mysql> FLUSH LOGS;