Event Scheduler是mysql新出的一個事件,他查一個計劃任務類的功能,我們可以通過在mysql中創建event來定時執行一些sql語句,這個我們就完全不需要像以前一樣來利用系統的計劃任務來執行定時任務了哦。
1.開啟
全局變量event_scheduler用來設定是否服務器端運行執行計劃任務,該變量有如下三種值:
OFF:計劃任務處於停止狀態,event scheduler線程沒有運行。是event_scheduler的默認值(執行一下任意一條命令關閉);
SET GLOBAL event_scheduler = OFF;
SET @@global.event_scheduler = OFF;
SET GLOBAL event_scheduler = 0;
SET @@global.event_scheduler = 0;
ON:計劃任務處於運行狀態,event scheduler線程啟動,並執行所有的計劃任務(執行一下任意一條命令開啟);
代碼如下 復制代碼
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;
DISABLED:該值將致使計劃任務不可運行
運行MySql服務時候加上參數
--event-scheduler=DISABLED
或者在my.cnf 中設置
查看源代碼打印幫助
1 event_scheduler=DISABLED
MySQL的Event Scheduler是根據預先安排的計劃進行數據庫操作的數據庫對象,可以看作是一種“時間觸發器”。Event實際上是被一個特殊的event scheduler線程執行的,假如它正在運行的話,可以通過SHOW PROCESSLIST命令看到它。
2.創建
創建的基本語法是:
代碼如下 復制代碼1 CREATE EVENT (1)
2 [IF NOT EXISTS] (2)
3 event_name (3)
4 ON SCHEDULE schedule (4)
5 [ON COMPLETION [NOT] PRESERVE] (5)
6 [ENABLE | DISABLE] (6)
7 [COMMENT 'comment'] (7)
8 DO sql_statement (8)
逐條介紹:
(1) 創建Event嘛,這倆關鍵字當然不能少了
(2) 如果不存在同名的數據庫對象才創建
(3) 計劃任務的名字。作為數據庫對象,都有一個本庫內唯一的名字做標識
(4) 計劃任務的計劃,重點就在這兒。有兩個關鍵字來設定任務的執行計劃:AT和EVERY:
AT指定的是一個一次性計劃,後面跟著一個時間戳,後續的sql語句將在指定的時間被執行一次;
EVERY指定的是一個周期性計劃,在該子句中可以指定從某時間點到某時間點期間,每隔某周期就執行一次該任務。
(5) 任務整個執行完畢後,該計劃任務對象是否還在數據庫中保留。默認不保留
(6) 有效或失效。默認有效
(7) 真正要執行的語句
3.示例
1.每10秒鐘向myschema.mytable表中插入時間戳:
代碼如下 復制代碼CREATE EVENT e_store_ts ON SCHEDULE EVERY 10 SECOND DO INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP());
2.在2008-02-06 23:59:00開始的一年內,每隔1小時就刪除掉messages表的早先的10條記錄:
代碼如下 復制代碼
CREATE EVENT e_hourly
ON SCHEDULE
EVERY 1 HOUR STARTS ’2007-02-10 23:59:00′ ENDS ’2008-02-10 23:59:00′
DO
DELETE FROM messages limit 10;
4.查看EVENT
mysql>SELECT * FROM INFORMATION_SCHEMA.EVENTS
> WHERE EVENT_NAME='e_store_ts'
> AND EVENT_SCHEMA='myschema'G
*************************** 1. row ***************************
EVENT_CATALOG: NULL
EVENT_SCHEMA: myschema
EVENT_NAME: e_store_ts
DEFINER: jon@ghidora
EVENT_BODY: SQL
EVENT_DEFINITION: INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP())
EVENT_TYPE: RECURRING
EXECUTE_AT: NULL
INTERVAL_VALUE: 5
INTERVAL_FIELD: SECOND
SQL_MODE: NULL
STARTS: 0000-00-00 00:00:00
ENDS: 0000-00-00 00:00:00
STATUS: ENABLED
ON_COMPLETION: NOT PRESERVE
CREATED: 2006-02-09 22:36:06
LAST_ALTERED: 2006-02-09 22:36:06
LAST_EXECUTED: NULL
EVENT_COMMENT:
1 row in set (0.00 sec)
5.刪除EVENT
代碼如下 復制代碼DELETE FROM mysql.event
WHERE db = 'myschema'
AND definer = 'jon@ghidora'
AND name = 'e_insert';