💬

MySQL の バイナリログ の消し方

2022/03/28に公開

MySQL の バイナリログ

/etc/my.cnf に log-bin = log-name を設定するとバイナリログを出力できますが、
デフォルトの設定だと MySQL を再起動したタイミングやバイナリログの最大容量(デフォルトでは最大の1GB)に達した時点でローテートされログが増え続けてしまいます。

現在の設定

/etc/my.cnf
[mysqld]
log-bin = log-name

log の状況

# ls /var/lib/mysql/
-rw-rw----  1 mysql mysql 10491971 1219 12:37 log-name.000001
-rw-rw----  1 mysql mysql      143 1219 13:04 log-name.000002
-rw-rw----  1 mysql mysql  1718471  121 09:07 log-name.000003
-rw-rw----  1 mysql mysql       60 1219 13:05 log-name.index

show master logs の状況

mysql> show master logs;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| ujm-server.000001 |  10491971 |
| ujm-server.000002 |       143 |
| ujm-server.000003 |   1718471 |
+-------------------+-----------+

手動でのバイナリログを削除

SQL を実行

mysql> purge master logs to 'ujm-server.000001';
Query OK, 0 rows affected (0.01 sec)

結果を表示

mysql> show master logs;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| ujm-server.000002 |       143 |
| ujm-server.000003 |   1718471 |
+-------------------+-----------+
2 rows in set (0.00 sec)

自動でバイナリログを削除

expire_logs_days を設定します。

現在の設定

mysql> show variables like 'expire_logs_days';

SQL を実行

mysql> SET GLOBAL expire_logs_days = 10;

今回は10日にしました。

変更後の設定

mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 10    |
+------------------+-------+
1 row in set (0.00 sec)

Discussion