動かざることバグの如し

近づきたいよ 君の理想に

MySQLのバイナリログを安全に削除する方法

バイナリログは ファイルで言う/var/lib/mysql/mysql-bin*で、いわゆるDBの更新ログ

これをもとにリカバリとかできるのだが、今回不必要なDBサーバーにバイナリログを書き出す設定にしてしまったので削除したいというメモ

直接削除するのはダメなの?

rm -rf /var/lib/mysql/mysql-bin*

はちょっと怖い

方法

まずどのくらいバイナリログが貯まっているのか確認するためにshow master logs

MariaDB [(none)]> show master logs;
+------------------+------------+
| Log_name         | File_size  |
+------------------+------------+
| mysql-bin.000001 |        356 |
| mysql-bin.000002 |  456049525 |
| mysql-bin.000003 |       2337 |
(略)
| mysql-bin.000126 |  788891983 |
| mysql-bin.000127 |        327 |
+------------------+------------+
127 rows in set (0.00 sec)

削除 今回は全部消したいので最後のバイナリログのファイルを指定

MariaDB [(none)]> purge master logs to 'mysql-bin.000127';
Query OK, 0 rows affected (2.20 sec)

再度show master logs;を実行して確認

実行できない場合

MariaDB [(none)]> show master logs;
ERROR 1381 (HY000): You are not using binary logging

となった場合はすでにバイナリログの記録が無効になっている。この場合はrge master logsできないので

[mysqld]
log-bin=mysql-bin

を追記してMySQLを再起動するしかない

SET GLOBALでもいけるかと思ったが

MariaDB [(none)]> SET GLOBAL sql_log_bin = 1;
ERROR 1238 (HY000): Variable 'sql_log_bin' is a SESSION variable

このセッション中のバイナリログしか見えないらしく、できなかった。バイナリログの記録が無効担っている場合はrmで消してもいいのかもしれないが未検証