MySQL 5.1.6+ 內置事件調度器,替代外部 Cron,實現數據庫層面的定時任務 (定期清理、統計聚合、分區維護等)。
-- 查看狀態
SHOW VARIABLES LIKE 'event_scheduler';
-- OFF 表示關閉
-- 臨時啟用 (重啟失效)
SET GLOBAL event_scheduler = ON;
-- 永久啟用:編輯 my.cnf [mysqld] 區塊
event_scheduler = ON
DELIMITER //
CREATE PROCEDURE `update_exam_endtime`()
BEGIN
UPDATE `examinfo` SET `endtime` = NOW() WHERE `id` = 14;
END //
DELIMITER ;
CREATE EVENT IF NOT EXISTS `e_update_exam_endtime`
ON SCHEDULE EVERY 30 SECOND
ON COMPLETION PRESERVE
DO CALL `update_exam_endtime`();
ON COMPLETION PRESERVE:執行完成後保留 Event (不自動刪除)。EVERY 30 SECOND:支持 SECOND/MINUTE/HOUR/DAY/WEEK/MONTH/YEAR。STARTS '2024-01-01 00:00:00' ENDS '2025-01-01 00:00:00'。
-- 禁用
ALTER EVENT `e_update_exam_endtime` ON COMPLETION PRESERVE DISABLE;
-- 啟用
ALTER EVENT `e_update_exam_endtime` ON COMPLETION PRESERVE ENABLE;
-- 刪除
DROP EVENT IF EXISTS `e_update_exam_endtime`;
SHOW EVENTS FROM `dbname`\G
-- 關鍵字段:Status (ENABLED/DISABLED/SLAVESIDE_DISABLED), Last_executed, Next_execution
確認 my.cnf 已設置 event_scheduler=ON 並重啟服務。若仍失效,檢查錯誤日誌是否有權限/初始化報錯。
event_scheduler=ON 時單線程串行執行)。INFORMATION_SCHEMA.EVENTS 與 mysql.event 表,結合 Prometheus/Grafana 告警。event_scheduler=DISABLED),主庫故障切換後需手動啟用或配置啟動腳本自動開啟。