MySQL 5.1 引入 Event Scheduler,可作為定時任務調度器。對比 Linux crontab 僅支援分鐘級,Event Scheduler 可達秒級執行,極適合高實時性場景(如從庫監控、即時統計)。
event_scheduler 管理SHOW PROCESSLIST 可見該 Daemon 執行緒event_scheduler 動態控制啟用/停用SET GLOBAL event_scheduler = ON;
SHOW PROCESSLIST\G
# Id: 46147, User: event_scheduler, Command: Daemon, State: Waiting on empty queue
DELIMITER //
CREATE PROCEDURE `Slave_Monitor`()
BEGIN
SELECT VARIABLE_VALUE INTO @SLAVE_STATUS
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME='SLAVE_RUNNING';
IF ('ON' != @SLAVE_STATUS) THEN
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=0;
START SLAVE;
END IF;
END; //
DELIMITER ;
限制:儲存程序無法呼叫 SHOW SLAVE STATUS,故無法獲取具體錯誤碼進行精細處理。
CREATE EVENT IF NOT EXISTS `Slave_Monitor`
ON SCHEDULE EVERY 5 SECOND
ON COMPLETION PRESERVE
DO CALL Slave_Monitor();
EVERY 5 SECOND:每 5 秒執行一次ON COMPLETION PRESERVE:執行完畢保留事件(不自動刪除)ALTER EVENT `Slave_Monitor` ON COMPLETION PRESERVE DISABLE;
ALTER EVENT `Slave_Monitor` ON COMPLETION PRESERVE ENABLE;
| 優勢 | 限制 |
|---|---|
| 秒級精度排程 | 無法在儲存程序中執行 SHOW 類指令 |
| 資料庫內建,無外部依賴 | 複雜邏輯難以除錯 |
| 支援啟用/停用/保留控制 | 高頻執行可能增加資料庫負載 |
建議用於輕量級、高頻率、容錯性要求高的資料庫內部維護任務。