MySQL Event Scheduler 精確到秒級調度,適合定時維護任務。本文示範每天檢查並刪除 4 天前的 Binlog。
SELECT @@event_scheduler; -- 顯示 ON/OFF/DISABLED
SET GLOBAL event_scheduler = ON; -- 運行時開啟
-- 或 my.cnf 永久生效
[mysqld]
event_scheduler = ON
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 天前時間點。SELECT * FROM information_schema.EVENTS\G
-- 關鍵列:LAST_EXECUTED(上次執行時間)、STATUS(ENABLED/DISABLED)
expire_logs_days 參數(但無法精確控制執行時間)。PURGE MASTER LOGS 需 BINLOG_ADMIN 或 SUPER 權限。EVENT 權限,執行時以定義者權限運行。[mysqld]
expire_logs_days = 7 -- 啟動時自動清理 7 天前 Binlog
優點:無需事件調度器,簡單可靠。缺點:清理時機不可控(啟動時),可能佔用磁盤過久。
生產建議:雙管齊下——設
expire_logs_days=7兜底,加 Event 每天凌晨低峰精確清理 4 天前,釋放空間更及時。