萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 清除 Relay Log 完整指南:手動清理、自動輪轉機制與預防堆積

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 無法自動刪除?

Binlog vs Relay Log 自動輪轉機制對比

原因機制
實例曾是 Slave,後停用複制無 IO Thread,relay_log_purge 機制失效
每日備份執行 FLUSH LOGS每次產生新 Relay Log,舊檔不被清理
未設定 expire_logs_days即使有 FLUSH LOGS 也不按時間清理
機制Binlog (Master)Relay Log (Slave)
Rotate 觸發寫入滿 max_binlog_size從 Master fetch 事件後,滿 max_relay_log_size(預設同 max_binlog_size)
Delete 觸發啟動/FLUSH LOGS 時檢查 expire_logs_daysSQL Thread 執行完事件後,若該 Relay Log 不再需要 → 立即刪除(relay_log_purge=ON 預設開啟)
時間清理支援 expire_logs_days不支援(8.0 仍不支援),僅靠 SQL Thread 刪除

預防堆積最佳實踐

  1. 不再做 Slave 時: 執行 STOP SLAVE; RESET SLAVE ALL; 徹底清理。
  2. 保留 Slave 身份: 確保 relay_log_purge=ON(預設),SQL Thread 正常運行即可自動刪除。
  3. 備份腳本避開 FLUSH LOGS: 改用 FLUSH BINARY LOGS(僅旋轉 Binlog)或 mysqldump --flush-logs(僅主庫)。
  4. 監控告警: 監控 Relay_log_space、Relay Log 檔案數量、磁碟使用率。
  5. 配置 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