Relay Log 產生條件
- 僅存在於 Slave/Replica 節點。
- IO Thread 從 Master 拉取 Binlog 寫入本地 Relay Log,SQL Thread 讀取 Relay Log 重放。
手動清理
STOP SLAVE;
RESET SLAVE; -- 5.7.6+ 建議 RESET SLAVE ALL
-- 會刪除 relay-log.info、master.info、所有 relay-bin.* 檔案
START SLAVE;
- 適用於:不再做從庫、重新配置複制、Relay Log 損壞/堆積。
為何 Relay Log 無法自動刪除?
| 原因 | 機制 |
| 實例曾是 Slave,後停用複制 | 無 IO Thread,relay_log_purge 機制失效 |
每日備份執行 FLUSH LOGS | 每次產生新 Relay Log,舊檔不被清理 |
未設定 expire_logs_days | 即使有 FLUSH LOGS 也不按時間清理 |
Binlog vs Relay Log 自動輪轉機制對比
| 機制 | Binlog (Master) | Relay Log (Slave) |
| Rotate 觸發 | 寫入滿 max_binlog_size | 從 Master fetch 事件後,滿 max_relay_log_size(預設同 max_binlog_size) |
| Delete 觸發 | 啟動/FLUSH LOGS 時檢查 expire_logs_days | SQL Thread 執行完事件後,若該 Relay Log 不再需要 → 立即刪除(relay_log_purge=ON 預設開啟) |
| 時間清理 | 支援 expire_logs_days | 不支援(8.0 仍不支援),僅靠 SQL Thread 刪除 |
預防堆積最佳實踐
- 不再做 Slave 時: 執行
STOP SLAVE; RESET SLAVE ALL; 徹底清理。
- 保留 Slave 身份: 確保
relay_log_purge=ON(預設),SQL Thread 正常運行即可自動刪除。
- 備份腳本避開 FLUSH LOGS: 改用
FLUSH BINARY LOGS(僅旋轉 Binlog)或 mysqldump --flush-logs(僅主庫)。
- 監控告警: 監控
Relay_log_space、Relay Log 檔案數量、磁碟使用率。
- 配置
expire_logs_days: 雖不直接清理 Relay Log,但可作為最後防線(啟動/FLUSH LOGS 時清理過期 Binlog,間接減少磁碟壓力)。
參數速查
SHOW VARIABLES LIKE 'relay_log%';
SHOW VARIABLES LIKE 'max_relay_log_size';
SHOW VARIABLES LIKE 'relay_log_purge';
SHOW GLOBAL STATUS LIKE 'Relay_log_space';
copyright ©
萬盛學電腦網 all rights reserved