Binlog 是主從複制與時間點恢復的核心,但無限制增長會佔滿磁碟。本文詳細說明自動過期參數、手動清理語法、安全清理流程,並深度對比 SBR/RBR/MBR 三種複製模式優劣與適用場景。
[mysqld]
expire_logs_days = 10 # 保留 10 天,單位:天
SHOW BINARY LOGS;
SHOW VARIABLES LIKE '%log%';
SET GLOBAL expire_logs_days = 10;
PURGE {MASTER | BINARY} LOGS TO 'log_name';
PURGE {MASTER | BINARY} LOGS BEFORE 'YYYY-MM-DD hh:mm:ss';
SHOW SLAVE STATUS\G 確認 Master_Log_File 與 Relay_Master_Log_FileSHOW MASTER LOGS 取得完整清單PURGE MASTER LOGS TO '基準檔名'; 或 BEFORE '日期';-- 從庫狀態
SHOW SLAVE STATUS\G;
# Master_Log_File: tc-ns-comment-db00-bin.000162
-- 主庫清理至 000070(確認所有從庫已超過此檔案)
PURGE MASTER LOGS TO 'tc-ns-comment-db00-bin.000070';
[mysqld]
log-bin=mysql-bin
binlog_format=MIXED # 推薦:SBR 為主,特定場景自動切 RBR
-- 線上動態修改
SET SESSION binlog_format = 'ROW';
SET GLOBAL binlog_format = 'MIXED';
| 維度 | SBR (Statement) | RBR (Row) | MBR (Mixed) |
|---|---|---|---|
| Binlog 體積 | 小 | 大(記錄每列變更) | 中 |
| 複制正確性 | 非確定性函數/觸發器易錯 | 最高(逐列記錄) | 自動切換,兼顧正確與體積 |
| 效能/鎖 | 全表掃描 UPDATE 鎖多 | 行鎖少,大批次 INSERT/UPDATE 優 | 視實際模式而定 |
| 審計/還原 | 可讀 SQL,易審計 | 二進制,不可直接閱讀 | 部分可讀 |
| 版本相容 | 主從版本可不同 | 需相容 | 需相容 |
| 適用場景 | 簡單 OLTP、審計需求強 | 高併發寫入、非確定函數、自增衝突 | 通用生產環境推薦 |
UUID()AUTO_INCREMENT 表同步更新INSERT DELAYEDUUID()GRANT/REVOKE/SET PASSWORD 永遠用 SBR 記錄binlog_format 設定binlog_format=MIXED + expire_logs_days=7~14。SET SESSION binlog_format=STATEMENT 減輕 binlog 壓力。SHOW MASTER LOGS 檔案數與總大小,設定告警閾值。relay_log_purge=ON(預設)自動清理已套用 relay log。科學設定保留策略、選對複製模式、建立清理 SOP,讓 Binlog 從「隱憂」變為「資產」。