首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 定時任務 Event 實戰:從創建到遷移持久化

     編輯:MySQL 資料庫相關知識

MySQL Event 定時任務完整實戰:創建、管理、持久化遷移

快速入門:每 30 秒更新一欄位


-- 1. 檢查/開啟調度器
SHOW VARIABLES LIKE 'event_scheduler';
SET GLOBAL event_scheduler = 1;

-- 2. 創建存儲過程(業務邏輯)
CREATE PROCEDURE update_exam()
BEGIN
    UPDATE examinfo SET endtime = NOW() WHERE id = 14;
END;

-- 3. 創建事件
CREATE EVENT IF NOT EXISTS e_update_exam
ON SCHEDULE EVERY 30 SECOND
ON COMPLETION PRESERVE
DO CALL update_exam();

事件生命週期管理


-- 暫停
ALTER EVENT e_update_exam DISABLE;
-- 恢復
ALTER EVENT e_update_exam ENABLE;
-- 修改頻率
ALTER EVENT e_update_exam ON SCHEDULE EVERY 1 MINUTE;
-- 刪除
DROP EVENT IF EXISTS e_update_exam;

重啟後事件消失?持久化配置

事件定義存於 mysql.event 表,**隨庫備份遷移**。但調度器啟動狀態不持久化,需在 my.cnf 固化:


[mysqld]
event_scheduler = ON

或啟動參數:mysqld --event_scheduler=ON。

完整語法參考(同 74193,此處精簡)

  • AT timestamp [+ INTERVAL ...]:單次
  • EVERY interval [STARTS ...] [ENDS ...]:循環
  • ON COMPLETION PRESERVE:保留事件定義
  • ENABLE/DISABLE:啟停

優缺點總結

優點缺點
純 SQL,無外部依賴僅支援單條 SQL(複雜邏輯需 CALL 存儲過程)
秒級精度高併發長事務可能阻塞調度器線程
隨庫遷移無分散式協調,集群環境需外部調度
資料庫層面事務一致性監控告警需自建(查 information_schema.EVENTS)

生產建議

  • 簡單周期性維護(歸檔、統計、清理)首選 Event
  • 複雜業務流程、跨庫、需重試/告警 → 採用 Airflow、XXL-Job 等外部調度
  • 定期 mysqldump --events 導出事件定義備份
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved