首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Event 定時任務實戰:建立、啟用、禁用、持久化完整指南

     編輯:MySQL 綜合教學

MySQL 5.1+ 內建 Event Scheduler (事件排程器),可替代作業系統 crontab 實現資料庫層面的定時任務。本文完整示範建立存儲過程、創建 Event、啟停控制、重啟持久化配置。

1. 檢查並啟用 Event Scheduler

-- 查看狀態
SHOW VARIABLES LIKE 'event_scheduler';
-- OFF 表示關閉

-- 臨時啟用 (重啟失效)
SET GLOBAL event_scheduler = ON;

-- 永久啟用 (寫入配置文件 my.cnf)
[mysqld]
event_scheduler = ON

2. 建立存儲過程 (任務邏輯)

DELIMITER //
CREATE PROCEDURE update_exam_endtime()
BEGIN
  UPDATE examinfo SET endtime = NOW() WHERE id = 14;
END //
DELIMITER ;

3. 創建 Event 定時任務

CREATE EVENT IF NOT EXISTS e_update_exam
ON SCHEDULE EVERY 30 SECOND
ON COMPLETION PRESERVE
DO CALL update_exam_endtime();
  • EVERY 30 SECOND:每 30 秒執行,支援 MINUTE, HOUR, DAY, WEEK, MONTH, YEAR
  • ON COMPLETION PRESERVE:任務完成後保留 Event (預設 DROP)
  • 支援 STARTS 'timestamp', ENDS 'timestamp' 限定時間範圍

4. Event 啟停控制

-- 禁用
ALTER EVENT e_update_exam DISABLE;

-- 啟用
ALTER EVENT e_update_exam ENABLE;

-- 修改排程
ALTER EVENT e_update_exam ON SCHEDULE EVERY 1 MINUTE;

5. 查看 Event 狀態

SHOW EVENTS;
SHOW CREATE EVENT e_update_exam;
SELECT * FROM information_schema.EVENTS WHERE EVENT_NAME = 'e_update_exam';

6. 重啟持久化關鍵

MySQL 重啟後 Event Scheduler 預設關閉,必須在 my.cnf [mysqld] 區段加入:

event_scheduler = ON

重啟服務後自動生效,定時任務不中斷。

優缺點與適用場景

優點缺點
資料庫內建、無外部依賴精度受限於秒級 (無毫秒)
備份/遷移資料庫連同 Event 一起高頻任務 (秒級) 可能影響效能
權限管理整合在 MySQL 權限體系無分散式協調能力 (單實例)
適合資料維護、統計聚合、清理任務複雜業務邏輯建議應用層排程

生產環境建議

  • 低頻資料維護任務 (每分鐘以上) → MySQL Event
  • 高頻/分散式/跨資料庫/需監控告警 → 系統 crontab / Quartz / XXL-Job / Airflow
  • Event 內避免長時間鎖表、大事務操作
  • 定期檢查 information_schema.EVENTS 確認執行狀態
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved