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

MySQL Event 定時任務實戰:排程器啟用、存儲過程建立、事件創建、啟停控制、持久化配置

     編輯:MySQL 資料庫相關知識

Event Scheduler 事件排程器

MySQL 5.1.6+ 內建 Event Scheduler 替代外部 Cron,實現資料庫層面的定時任務。

完整操作流程

1. 檢查並啟用排程器


# 檢查狀態
SHOW VARIABLES LIKE 'event_scheduler';
# OFF → 需啟用

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

# 永久啟用 (配置檔)
[mysqld]
event_scheduler = ON

2. 建立存儲過程 (業務邏輯封裝)


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

3. 創建定時事件


# 每 30 秒執行一次,保留完成狀態
CREATE EVENT IF NOT EXISTS e_update_exam
ON SCHEDULE EVERY 30 SECOND
ON COMPLETION PRESERVE
DO CALL update_exam_endtime();

# 常見排程語法
ON SCHEDULE AT '2024-12-31 23:59:59'                    -- 單次執行
ON SCHEDULE EVERY 1 DAY STARTS '2024-01-01 00:00:00'    -- 每日
ON SCHEDULE EVERY 1 WEEK                                -- 每週
ON SCHEDULE EVERY 1 MONTH                               -- 每月
ON SCHEDULE EVERY 1 HOUR                                -- 每小時

4. 事件啟停控制


# 停用事件
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;

5. 監控與管理


# 查看所有事件
SHOW EVENTS;
SHOW EVENTS FROM dbname;

# 查看特定事件詳情
SHOW CREATE EVENT e_update_exam;

# 檢查排程器執行緒狀態
SHOW PROCESSLIST;
# 會看到 "Daemon" 命令的 event_scheduler 執行緒

持久化關鍵:配置檔設定

若重啟後事件消失,檢查 my.cnf:


[mysqld]
event_scheduler = ON

重啟服務後自動生效,無需手動 SET GLOBAL。

Event vs Cron 對比

特性MySQL EventSystem Cron
管理範疇資料庫內部作業系統層
備份遷移隨資料庫備份 (mysqldump --events)需額外備份 crontab
權限模型MySQL 權限系統 (EVENT 權限)OS 使用者權限
時區處理使用 MySQL 時區 (time_zone)使用系統時區
精度秒級分鐘級 (標準 Cron)
適用場景資料維護、統計聚合、清理過期資料系統維護、檔案處理、外部腳本

最佳實踐

  1. ✅ 複雜邏輯封裝於存儲過程,Event 僅負責排程觸發
  2. ✅ 事件命名規範:e_<業務域>_<動作>_<頻率> (如 e_order_cleanup_daily)
  3. ✅ 生產環境禁用 ON COMPLETION NOT PRESERVE (預設),避免一次性事件自動刪除導致邏輯缺失
  4. ✅ 監控 information_schema.EVENTS 狀態,異常告警
  5. ✅ 備份包含 --events 參數:mysqldump --events --all-databases
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved