MySQL 5.1 引入,可替代 OS 層級的 cron(最小粒度 1 分鐘),支援秒級排程,適合高即時性需求。本質為專用執行緒(event_scheduler),由全域變數 event_scheduler 控制啟停。
SET GLOBAL event_scheduler = ON;
SHOW PROCESSLIST\G
-- 可見 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,故改查 information_schema.GLOBAL_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;
1062 (Duplicate entry) 錯誤,可在 Slave 設定 slave-skip-errors=1062 並重啟。