MySQL Event Scheduler(事宜調劑器)。本站提示廣大學習愛好者:(MySQL Event Scheduler(事宜調劑器))文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL Event Scheduler(事宜調劑器)正文
1、概述
事宜調劑器是在 MySQL 5.1 中新增的另外一個特點功效,可以作為准時義務調劑器,代替部門本來只能用操作體系義務調劑器能力完成的准時功>能。例如,Linux 中的 crontabe 只能准確到每分鐘履行一次,而 MySQL 的事宜調劑器則可以完成每秒鐘履行一個義務,這在一些對及時性要>求較高的情況下就異常適用了。
事宜調劑器是准時觸發履行的,在這個角度上也能夠稱作是"暫時的觸發器"。觸發器只是針對某個表發生的事宜履行一些語句,而事宜調劑器則是在某一個(距離)時光履行一些語句。事宜是由一個特定的線程來治理的,也就是所謂的"事宜調劑器"。啟用事宜調劑器後,具有 SUPER 權限的賬戶履行 SHOW PROCESSLIST 便可以看到這個線程了。經由過程設定全局變量event_scheduler 的值便可靜態的掌握事宜調劑器能否啟用。
(root:localhost:)test> SET GLOBAL event_scheduler = ON;
(root:localhost:)test> show processlist\G
*************************** 4. row ***************************
Id: 46147
User: event_scheduler
Host: localhost
db: NULL
Command: Daemon
Time: 1
State: Waiting on empty queue
Info: NULL
如上,該線程的一切者是 event_scheduler。
2、運用案例
本案例是應用 event scheduler 的特征,每秒鐘挪用一次存儲進程,用於斷定 SLAVE 能否正常運轉,假如發明 SLAVE 封閉了,疏忽 0 次毛病,然後從新啟動 SLAVE。
起首創立存儲進程
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;
SLAVE START;
END IF;
end; //
delimiter ;
因為存儲進程中沒法挪用相似 SHOW SLAVE STATUS 如許的語句,是以沒法獲得確實的復制毛病信息和毛病代碼,不克不及進一步的處置 SLAVE 停滯的各類情形。
接著,創立義務
CREATE EVENT IF NOT EXISTS `Slave_Monitor`
ON SCHEDULE EVERY 5 SECOND
ON COMPLETION PRESERVE
DO
CALL Slave_Monitor();
創立了一個義務,每 5秒鐘 履行一次,義務停止後照舊保存該義務,而不是刪除。固然了,在本例中的義務不會停止,除非將它手動制止了。
假如在運轉中想要暫時封閉一下某個義務,履行 ALTER EVENT 語句便可:
(root:localhost:)test> alter event `Slave_Monitor` ON
COMPLETION PRESERVE DISABLE;
(root:localhost:)test> alter event `Slave_Monitor` ON
COMPLETION PRESERVE ENABLE;