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

MySQL Event Scheduler 事件排程器完整教學與從庫監控實戰

     編輯:MySQL 資料庫相關知識

事件排程器簡介

MySQL 5.1 引入,可替代 OS 層級的 cron(最小粒度 1 分鐘),支援秒級排程,適合高即時性需求。本質為專用執行緒(event_scheduler),由全域變數 event_scheduler 控制啟停。

啟用與查看

SET GLOBAL event_scheduler = ON;
SHOW PROCESSLIST\G
-- 可見 User: event_scheduler, Command: Daemon, State: Waiting on empty queue

實戰案例:每 5 秒檢查 Slave 狀態並自動修復

1. 建立預存程序

DELIMITER //
CREATE PROCEDURE `Slave_Monitor`()
BEGIN
    SELECT VARIABLE_VALUE INTO @SLAVE_STATUS
    FROM information_schema.GLOBAL_STATUS
    WHERE VARIABLE_NAME = 'SLAVE_RUNNING';
    IF ('ON' != @SLAVE_STATUS) THEN
        SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 0;
        START SLAVE;
    END IF;
END //
DELIMITER ;

註:預存程序內無法直接用 SHOW SLAVE STATUS,故改查 information_schema.GLOBAL_STATUS。

2. 建立事件

CREATE EVENT IF NOT EXISTS `Slave_Monitor`
ON SCHEDULE EVERY 5 SECOND
ON COMPLETION PRESERVE
DO CALL Slave_Monitor();
  • EVERY 5 SECOND:每 5 秒執行一次。
  • ON COMPLETION PRESERVE:執行完保留事件,不自動刪除。

3. 動態啟停事件

ALTER EVENT `Slave_Monitor` ON COMPLETION PRESERVE DISABLE;
ALTER EVENT `Slave_Monitor` ON COMPLETION PRESERVE ENABLE;

優缺點與注意事項

  • 優點:秒級排程、資料庫內建、無需外部依賴。
  • 缺點:複雜邏輯建議寫在預存程序,事件本身僅負責排程觸發。
  • 若遇 1062 (Duplicate entry) 錯誤,可在 Slave 設定 slave-skip-errors=1062 並重啟。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved