熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

MySQL事件調度器Event Scheduler詳解

2022-06-13   來源: MySQL 

事件調度器是在 MySQL 中新增的另一個特色功能可以作為定時任務調度器取代部分原先只能用操作系統任務調度器才能完成的定時功>能例如Linux 中的 crontabe 只能精確到每分鐘執行一次而 MySQL 的事件調度器則可以實現每秒鐘執行一個任務這在一些對實時性要>求較高的環境下就非常實用了

事件調度器是定時觸發執行的在這個角度上也可以稱作是臨時的觸發器觸發器只是針對某個表產生的事件執行一些語句而事件調度器則是在某一個(間隔)時間執行一些語句事件是由一個特定的線程來管理的也就是所謂的事件調度器啟用事件調度器後擁有 SUPER 權限的賬戶執行 SHOW PROCESSLIST 就可以看到這個線程了通過設定全局變量event_scheduler 的值即可動態的控制事件調度器是否啟用

(root:localhost:)test> SET GLOBAL event_scheduler = ON;
(root:localhost:)test> show processlist\G
*************************** row ***************************
Id:
User: event_scheduler
Host: localhost
db: NULL
Command: Daemon
Time:
State: Waiting on empty queue
Info: NULL

如上該線程的所有者是 event_scheduler

應用案例

本案例是利用 event scheduler 的特性每秒鐘調用一次存儲過程用於判斷 SLAVE 是否正常運行如果發現 SLAVE 關閉了忽略 次錯誤然後重新啟動 SLAVE

首先創建存儲過程

delimiter //
create procedure `Slave_Monitor`()
begin

SELECT VARIABLE_VALUE INTO @SLAVE_STATUS
FROM information_schemaGLOBAL_STATUS
WHERE VARIABLE_NAME=SLAVE_RUNNING;

IF (ON != @SLAVE_STATUS) THEN
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=;
SLAVE START;
END IF;

end; //
delimiter ;

 
由於存儲過程中無法調用類似 SHOW SLAVE STATUS 這樣的語句因此無法得到確切的復制錯誤信息和錯誤代碼不能進一步的處理 SLAVE 停止的各種情況

接著創建任務

CREATE EVENT IF NOT EXISTS `Slave_Monitor`
ON SCHEDULE EVERY SECOND
ON COMPLETION PRESERVE
DO
CALL Slave_Monitor();

創建了一個任務秒鐘 執行一次任務結束後依舊保留該任務而不是刪除當然了在本例中的任務不會結束除非將它手動禁止了

如果在運行中想要臨時關閉一下某個任務執行 ALTER EVENT 語句即可

(root:localhost:)test> alter event `Slave_Monitor` ON
COMPLETION PRESERVE DISABLE;
(root:localhost:)test> alter event `Slave_Monitor` ON
COMPLETION PRESERVE ENABLE;


From:http://tw.wingwit.com/Article/program/MySQL/201404/30554.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.