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

MySQL Event Scheduler 定時清理 Binlog:每日自動 PURGE MASTER LOGS 保留 4 天

     編輯:MySQL 綜合教學

啟用事件排程器

-- 檢查
SELECT @@event_scheduler;  -- OFF / ON / DISABLED

-- 運行時開啟
SET GLOBAL event_scheduler = ON;

-- 永久生效 (my.cnf)
[mysqld]
event_scheduler = ON

建立每日清理事件

CREATE EVENT `purge_binlog_daily`
ON SCHEDULE EVERY 1 DAY
STARTS TIMESTAMP(CURDATE() + INTERVAL 1 DAY, '03:00:00')  -- 凌晨 3 點低峰期
ON COMPLETION PRESERVE
ENABLE
COMMENT '每日清理 4 天前的 Binlog,釋放磁碟空間'
DO
  PURGE MASTER LOGS BEFORE DATE_SUB(NOW(), INTERVAL 4 DAY);

驗證與監控

-- 查看事件狀態
SELECT * FROM information_schema.EVENTS
WHERE EVENT_SCHEMA = DATABASE() AND EVENT_NAME = 'purge_binlog_daily'\G

-- 關鍵欄位
STATUS: ENABLED
LAST_EXECUTED: 2024-01-15 03:00:01
EXECUTE_AT: NULL (週期性)
INTERVAL_VALUE: 1
INTERVAL_FIELD: DAY

參數調整建議

場景保留天數執行頻率備註
高寫入、磁碟小1~2 天每 6 小時EVERY 6 HOUR + INTERVAL 2 DAY
標準生產4~7 天每日平衡恢復點目標 (RPO) 與空間
需支援延遲 Slave≥ Max(Slave 延遲) + 1 天每日確保 Slave 仍能追上

替代方案:binlog_expire_logs_seconds (MySQL 8.0+)

[mysqld]
binlog_expire_logs_seconds = 345600  -- 4 天 = 4*86400 秒,自動清理,無需 Event
  • 原生參數,啟動即生效,無排程器依賴。
  • 精確到秒,避免 Event 執行延遲導致殘留。
  • 建議 8.0+ 直接用此參數棄用 Event。

注意事項

  1. PURGE MASTER LOGS 需 BINLOG_ADMIN 或 SUPER 權限,Event Definer 必須具備。
  2. 若有 Slave,清理前確認 SHOW SLAVE STATUS 中 Relay_Master_Log_File 未被刪除。
  3. 備份策略:Binlog 清理前應已完成全備/增備 (XtraBackup/ mysqldump --master-data)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved