主庫繁忙寫入下,Binlog 增長極快。未清理將佔滿磁碟導致寫入阻塞、甚至主庫掛起。Row 格式(RBR)更佔空間。
[mysqld]
expire_logs_days = 10 -- 保留 10 天,超過自動刪除
SHOW BINARY LOGS;
SHOW VARIABLES LIKE '%log%';
SET GLOBAL expire_logs_days = 10;
-- 刪除 10 天前的所有 Binlog
PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 10 DAY);
-- 等價寫法
PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';
-- 查看剩餘
SHOW MASTER LOGS;
MASTER = BINARY 同義詞。刪除前**務必確認從庫已應用至該位置**(SHOW SLAVE STATUS\G對比Relay_Master_Log_File)。
| 特性 | SBR (Statement) | RBR (Row) | MBR (Mixed) |
|---|---|---|---|
| Binlog 內容 | SQL 文本 | 行變更前後映像 | 自動切換 |
| Binlog 體積 | 小 | 大(特別是大批量 UPDATE/DELETE) | 中等 |
| 複寫準確性 | 非確定性函數/觸發器可能不一致 | **完全一致**,最安全 | 兼顧 |
| 主鍵衝突處理 | 易發生 | **原生解決** | 自動切 RBR |
| 從庫回放效能 | 需重新執行 SQL,全掃描慢 | 直接應用行變更,快 | 視實際模式 |
| 跨版本複寫 | 支援良好 | 需版本相容 | 視實際模式 |
| 審計/即時還原 | 可讀 SQL,適合 | 二進位,需工具解析 | 視實際模式 |
UUID()AUTO_INCREMENT 表同時更新INSERT DELAYEDUUID())-- 會話級
SET SESSION binlog_format = 'ROW|STATEMENT|MIXED';
-- 全域級(需 SUPER,影響新會話)
SET GLOBAL binlog_format = 'MIXED';
-- 持久化
# my.cnf
binlog_format = MIXED
受限場景(存儲程序/觸發器中、啟用 NDB、會話用 RBR 且開啟臨時表)無法動態切換。
INSERT/UPDATE/DELETE) → 遵循 binlog_formatGRANT/REVOKE/SET PASSWORD) → **強制 SBR**INSERT INTO db_allot_ids SELECT * FROM db_allot_ids;
-- SBR Binlog:記錄 SQL 文本 → 從庫重新執行 → 主鍵衝突
-- RBR Binlog:記錄每行前後映像 → 從庫直接應用 → 無衝突
expire_logs_days = 7-14,配合備份策略SET SESSION binlog_format='STATEMENT' 減少 Binlog 體積Max_binlog_size 觸發 rotate 頻率,異常暴增報警relay_log_purge=ON、relay_log_recovery=ON