event_scheduler 管理。SET GLOBAL event_scheduler = ON|OFF;SET GLOBAL event_scheduler = ON;
SHOW PROCESSLIST;
-- 可見 Id: xxx, User: event_scheduler, Command: Daemon, State: Waiting on empty queue
DELIMITER //
CREATE PROCEDURE `Slave_Monitor`()
BEGIN
DECLARE slave_status VARCHAR(10);
SELECT VARIABLE_VALUE INTO slave_status
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'SLAVE_RUNNING';
IF slave_status != 'ON' THEN
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 0; -- 或根據實際錯誤碼設定
START SLAVE;
END IF;
END //
DELIMITER ;
限制:預存程序中無法直接執行 SHOW SLAVE STATUS,故無法獲取具體錯誤碼 (Last_SQL_Errno) 精準處理,僅能粗略重啟。
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:執行完保留事件 (預設 DROP),適合週期性任務。-- 暫停事件
ALTER EVENT `Slave_Monitor` ON COMPLETION PRESERVE DISABLE;
-- 恢復事件
ALTER EVENT `Slave_Monitor` ON COMPLETION PRESERVE ENABLE;
| 維度 | MySQL Event Scheduler | Linux Cron | 應用層 |
|---|---|---|---|
| 精度 | 秒級 | 分鐘級 | 任意 (視框架) |
| 管理介面 | SQL (CREATE/ALTER/DROP EVENT) | crontab -e | 程式碼/配置檔 |
| 事務整合 | 原生支援、同連線上下文 | 需自行連線管理 | 原生 |
| 高可用 | 隨 MySQL 主從切換需手動同步事件定義 | 獨立於 DB | 隨應用部署 |
| 適用場景 | 資料庫內部維護 (分區輪轉、統計更新、從庫監控) | 系統級備份、日誌清理、外部腳本 | 業務邏輯排程、跨服務編排 |
event_scheduler 執行緒狀態,異常時告警。information_schema.EVENTS 查詢所有事件狀態。