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

MySQL Event Scheduler 事件調度器:秒級定時任務實戰全攻略

     編輯:MySQL 資料庫相關知識

為何選 Event Scheduler?

相較 OS 級 cron(分鐘粒度),MySQL 事件調度器支援秒級排程,適合即時性資料處理(如每秒聚合、定時清理過期資料)。

建立事件語法核心

CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO event_body;

排程規則 schedule 兩大模式

  • 單次執行:AT timestamp [+ INTERVAL interval]
  • 週期執行:EVERY interval [STARTS timestamp] [ENDS timestamp]

interval 單位支援:SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR 及複合單位(如 DAY_HOUR)。

實用範例集

範例 1:每小時自增欄位

CREATE EVENT myevent
ON SCHEDULE EVERY 1 HOUR STARTS CURRENT_TIMESTAMP
DO UPDATE myschema.mytable SET mycol = mycol + 1;

範例 2:延遲 1 天啟動,每小時執行

CREATE EVENT myevent
ON SCHEDULE EVERY 1 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
DO UPDATE myschema.mytable SET mycol = mycol + 1;

範例 3:複合 SQL 區塊(每 5 秒批次寫入)

DELIMITER //
CREATE EVENT e_batch
ON SCHEDULE EVERY 5 SECOND
DO BEGIN
  DECLARE v INT DEFAULT 0;
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
  WHILE v < 5 DO
    INSERT INTO t1 VALUES (0);
    UPDATE t2 SET s1 = s1 + 1;
    SET v = v + 1;
  END WHILE;
END //
DELIMITER ;

事件管理與監控

操作SQL
查看所有事件SHOW EVENTS;
啟用事件ALTER EVENT e_name ON COMPLETION PRESERVE ENABLE;
停用事件ALTER EVENT e_name ON COMPLETION PRESERVE DISABLE;
修改排程/主體ALTER EVENT e_name ON SCHEDULE ... DO ...
查看最後執行時間SELECT EVENT_NAME, LAST_EXECUTED FROM information_schema.EVENTS;

調度器啟用/關閉(全域)

-- 啟用(四種等價寫法)
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = 1;

-- 關閉
SET GLOBAL event_scheduler = OFF;

查看狀態:SHOW VARIABLES LIKE 'event_scheduler'; 或 SHOW PROCESSLIST; 觀察 event_scheduler 執行緒。

注意事項

  • 事件內 DML 需明確指定 schema.table
  • 避免長時間鎖表操作阻塞調度器執行緒
  • 從庫預設 DISABLE ON SLAVE,需主動 ENABLE 才會在從庫執行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved