Binlog 記錄所有修改操作,用於數據恢復、主從同步。若不及時清理,佔滿磁盤導致服務不可用。
mysql> SHOW MASTER LOGS;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000010 | 63328652 |
+------------------+-----------+
mysql> SHOW BINARY LOGS; -- 同義詞
...
原則:不可刪除 Slave 正在讀取或尚未讀取的 Binlog。
SHOW SLAVE STATUS 確認 Master_Log_File / Read_Master_Log_Pos。SHOW MASTER LOGS 獲取全量列表。Master_Log_File 作為「目標日志」。PURGE MASTER LOGS TO 'mysql-bin.000800'; -- 刪除 000800 之前的所有
PURGE MASTER LOGS BEFORE '2024-01-15 12:00:00'; -- 刪除該時間點前的所有
RESET MASTER; -- 清空所有 Binlog,重新從 000001 開始,慎用!
在 my.cnf [mysqld] 添加:
expire_logs_days = 7 -- 7 天自動清理,單位:天
重啟生效。MySQL 8.0+ 推薦使用 binlog_expire_logs_seconds(秒級精度)。
註釋 my.cnf 兩行並重啟:
# log-bin=mysql-bin
# binlog_format=mixed
RESET MASTER。expire_logs_days 實現無人值守清理。