首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

MHA Relay Log 清理機制:purge_relay_logs 腳本原理與部署最佳實踐

     編輯:DB2 教學

背景:為何需要手動清理?

MySQL 預設從庫在 SQL 執行緒執行完 Relay Log 後自動刪除。但 MHA 架構下,滯後從庫恢復需依賴其他從庫的 Relay Log,因此必須:

  1. 禁用自動清理:relay_log_purge = 0
  2. 定期手動清理避免磁碟耗盡

purge_relay_logs 核心邏輯

  1. 建立硬連結:將待刪除 Relay Log 在同分區建立硬連結(最小化大檔案刪除造成的 I/O 尖峰)
  2. 觸發輪替:
    SET GLOBAL relay_log_purge = 1;
    FLUSH LOGS;
    SET GLOBAL relay_log_purge = 0;
    使 MySQL 產生新 Relay Log 檔案,舊檔案可安全刪除
  3. 刪除歸檔目錄硬連結:rm -f /path/to/archive_dir/*

參數說明

參數說明預設值
--userMySQL 用戶名root
--passwordMySQL 密碼—
--host主機位址127.0.0.1
--port連接埠3306
--workdir硬連結建立目錄(建議與 Relay Log 同分區)/var/tmp
--disable_relay_log_purge若 relay_log_purge=1 則腳本退出;設此參數則暫設為 0 清理後復原—

定時任務部署

# 每天凌晨 5 點執行清理
0 5 * * * app /usr/bin/purge_relay_logs \
  --user=root --password=PASSWORD \
  --disable_relay_log_purge \
  >> /var/log/masterha/purge_relay_logs.log 2>&1

手動執行範例

$ purge_relay_logs --user=mha --password=mha --disable_relay_log_purge
2015-04-23 14:33:20: purge_relay_logs script started.
relay_log_purge is enabled. Disabling..
Found relay_log.info: /data/mysqldata/relay-log.info
Opening /data/mysqldata/vdbsrv3-relay-bin.000001 ..
Opening /data/mysqldata/vdbsrv3-relay-bin.000002 ..
Executing SET GLOBAL relay_log_purge=1; FLUSH LOGS; sleeping a few seconds so that SQL thread can delete older relay log files (if it keeps up); SET GLOBAL relay_log_purge=0; .. ok.
2015-04-23 14:33:23: All relay log purging operations succeeded.

關鍵注意事項

  • 分區限制:硬連結僅能在同一檔案系統分區建立,--workdir 必須與 Relay Log 目錄同分區
  • 清理頻率:視寫入量調整,避免單次清理過多檔案造成 I/O 風暴
  • 監控告警:監控磁碟使用率與腳本執行狀態,失敗需即時告警
  • MHA 整合:MHA Manager 可自動協調從庫 Relay Log 保留策略,配合此腳本使用
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved