首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 事件調度器定時清理 Binlog:EVENT + PURGE MASTER LOGS 實現自動輪轉

     編輯:MySQL 資料庫相關知識

MySQL Event Scheduler 精確到秒級調度,適合定時維護任務。本文示範每天檢查並刪除 4 天前的 Binlog。

1. 確保調度器啟用

SELECT @@event_scheduler;  -- 顯示 ON/OFF/DISABLED

SET GLOBAL event_scheduler = ON;  -- 運行時開啟
-- 或 my.cnf 永久生效
[mysqld]
event_scheduler = ON

2. 創建定時清理事件

CREATE EVENT purge_binlog
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP
DO
    PURGE MASTER LOGS BEFORE DATE_SUB(NOW(), INTERVAL 4 DAY);
  • EVERY 1 DAY:每天執行一次。
  • PURGE MASTER LOGS BEFORE 'date':刪除指定時間點之前的所有 Binlog 文件(含索引)。
  • DATE_SUB(NOW(), INTERVAL 4 DAY):動態計算 4 天前時間點。

3. 查看事件執行情況

SELECT * FROM information_schema.EVENTS\G
-- 關鍵列:LAST_EXECUTED(上次執行時間)、STATUS(ENABLED/DISABLED)

注意事項

  1. 主從環境:清理前確認所有從庫已同步至該 Binlog,否則從庫報錯斷開。可在事件前加檢查邏輯或改用 expire_logs_days 參數(但無法精確控制執行時間)。
  2. PURGE MASTER LOGS 需 BINLOG_ADMIN 或 SUPER 權限。
  3. 事件定義者權限:創建者需 EVENT 權限,執行時以定義者權限運行。

替代方案:expire_logs_days

[mysqld]
expire_logs_days = 7   -- 啟動時自動清理 7 天前 Binlog

優點:無需事件調度器,簡單可靠。缺點:清理時機不可控(啟動時),可能佔用磁盤過久。

生產建議:雙管齊下——設 expire_logs_days=7 兜底,加 Event 每天凌晨低峰精確清理 4 天前,釋放空間更及時。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved