| 方式 | 命令 | 適用場景 | 風險 |
|---|---|---|---|
| 1. 清空全部 | RESET MASTER; | 全新環境、測試庫、主從重建前 | **刪除所有 binlog,從庫將中斷** |
| 2. 刪除指定檔案前 | PURGE BINARY LOGS TO 'mysql-bin.000018'; | 保留最新 N 個檔案 | 需確認從庫已同步至該檔案 |
| 3. 刪除指定時間前 | PURGE BINARY LOGS BEFORE '2024-05-01 00:00:00'; | 按時間保留策略 | 同前 |
| 4. 自動過期 | expire_logs_days = 7 (5.7) / binlog_expire_logs_seconds = 604800 (8.0) | 生產環境標準配置 | 無風險,自動化 |
SHOW BINARY LOGS;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 1357315 |
| mysql-bin.000002 | 117 |
...
| mysql-bin.000021 | 181229 |
+------------------+-----------+
PURGE BINARY LOGS TO 'mysql-bin.000018';
SHOW BINARY LOGS; -- 僅剩 000018 之後
SHOW BINLOG EVENTS IN 'mysql-bin.000018' LIMIT 10;
-- 或命令列工具
mysqlbinlog --no-defaults mysql-bin.000018 | head -50
[mysqld]
# 註釋或移除
# log-bin=mysql-bin
# binlog_format=mixed
# 重啟生效
systemctl restart mysqld
binlog_expire_logs_seconds = 604800 (7 天),MySQL 8.0 預設 30 天。max_binlog_size = 100M,避免單檔過大難以傳輸/解析。binlog_format = ROW,支援完整行級復制,避免非確定性函數問題。gtid_mode=ON + enforce_gtid_consistency=ON,簡化故障轉移與拓撲變更。rsync 或 mysqlbinlog --raw --read-from-remote-server 同步至異地,防單點災難。# 只有在 MySQL 已停止、確認無從庫、無備份需求時
systemctl stop mysqld
rm -f /var/lib/mysql/mysql-bin.00000*
# 必須同步刪除 index 檔案條目,否則啟動報錯
systemctl start mysqld
警告:直接 rm 會導致 mysql-bin.index 與實際檔案不一致,MySQL 啟動失敗或從庫報錯。**嚴禁在運行中直接刪檔**。
Binlog 管理核心原則:**自動過期為主,手動 PURGE 為輔,嚴禁 rm 物理刪除**。配置 expire_logs_days/binlog_expire_logs_seconds、max_binlog_size、binlog_format=ROW、GTID,構建零維護、高可靠的 Binlog 生命週期管理。