【MySQL】事件排程器 (Event Scheduler)
一 event 介紹
事件排程器是定時觸發執行的,在這個角度上也可以稱作是"臨時的觸發器"。觸發器只是針對某個表產生的事件執行一些語句,而事件排程器則是在某一個(間隔)時間執行一些語句。事件是由一個特定的執行緒來管理的,也就是所謂的"事件排程器"。啟用事件排程器後,擁有 SUPER 許可權的賬戶執行 SHOW PROCESSLIST 就可以看到這個執行緒了。透過設定全域性變數event_scheduler 的值即可動態的控制事件排程器是否啟用。
在使用這個功能之前必須確保event_scheduler已開啟,可執行
SET GLOBAL event_scheduler = 1;
或
SET GLOBAL event_scheduler = on;
設定成功之後,執行show proceslist;
root@127.0.0.1 : (none) 11:56:09> show variables like '%event_scheduler%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | OFF |
+-----------------+-------+
1 row in set (0.01 sec)
root@127.0.0.1 : (none) 11:56:30> SET GLOBAL event_scheduler = 1;
Query OK, 0 rows affected (0.03 sec)
root@127.0.0.1 : (none) 11:56:41> show variables like '%event_scheduler%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | ON |
+-----------------+-------+
1 row in set (0.01 sec)
root@127.0.0.1 : (none) 11:59:57> show processlist;
+--------+-----------------+-----------------+------+---------+------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+-----------------+-----------------+------+---------+------+------------------------+------------------+
| 165933 | root | localhost:34672 | NULL | Query | 0 | NULL | show processlist |
| 165934 | event_scheduler | localhost | NULL | Daemon | 204 | Waiting on empty queue | NULL |
+--------+-----------------+-----------------+------+---------+------+------------------------+------------------+
2 rows in set (0.00 sec)
程式中會出現一個event_scheduler的使用者用於執行排程事件。
二、建立事件
create evnet [if not exists] event_name
on schedule schedule
[on completion [not] preserve]
[enable | disenable]
[commet 'commet']
do sql_statement;
schedule:
AT timestamp [+ interval interval] | every interval [starts timestamp] [ends timestamp]
interval:
quantity {year | quarter | month | day | hour | minute |
week | sencond | year_month | day_hour | day_minute |
day_sencond | hour_minute | hour_sencond | minute_sencond}
1) 建立一個任務每隔兩秒向表插入資料
create evnet e_tab_insert
on schedule every 2 sencond
do insert into yang.evnt values (now());
2) 10天后清空evnt表:
create evnet e_10d_truct_evnt
on schedule at current_timestamp + interal 10 day
do truncate table yang.evnt;
3) 2013年4月5日12點整清空evnt表:
create evnet e_evnt_1
on schedule at timestamp '2013-04-05 12:00:00'
do truncate table yang.evnt;
4) 2天后開啟每天定時清空evnt表,一年後停止執行:
create evnet e_evnt_2
on schedule every 1 day
starts current_timestamp + interval 2 day
ends current_timestamp + interval 1 year
do truncate table yang.evnt
[on completion [not] preserve]可以設定這個事件是執行一次還是持久執行,預設為not preserve。
5) 每天定時清空evnt表(只執行一次,任務完成後就終止該事件):
create evnet e_evnt_3
on schedule every 1 day
on completion not preserve
do truncate table yang.evnt
[enable | disenable]可是設定該事件建立後狀態是否開啟或關閉,預設為enable。
[commet 'commet']可以給該事件加上註釋。
三、修改事件
alter event event_name
[on schedule schedule]
[rename to new_event_name]
[on completion [not] preserve]
[commet 'commet']
[enable | disenable]
[do sql_statement]
1) 關閉事件
alter event e_evnt disenable;
2) 開啟事件
alter event e_evnt enable;
3) 將每天清空evnt表改為5天清空一次:
alter event e_evnt
on schedule every 5 day;
四、刪除事件
DROP event [IF EXISTS] event_name
五 注意事項
對於主從架構的資料庫要注意將從庫的任務排程關閉,以防止在主庫執行了之後,從庫又重複在備庫進行排程evnet。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-757743/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 詳解 MySQL 用事件排程器 Event Scheduler 建立定時任務MySql事件
- 詳解MySQL用事件排程器Event Scheduler建立定時任務MySql事件
- MySQL中的事件排程器EVENTMySql事件
- MYSQL事件排程器MySql事件
- goroutine 排程器(scheduler)Go
- Pod的排程是由排程器(kube-scheduler)
- MySQL 伺服器啟用 event_schedulerMySql伺服器
- golang 原始碼分析之scheduler排程器Golang原始碼
- 配置hadoop 使用fair scheduler排程器HadoopAI
- mysql 儲存過程和事件排程MySql儲存過程事件
- mysql 事件 eventMySql事件
- RxJava原始碼解析(二)—執行緒排程器SchedulerRxJava原始碼執行緒
- oracle排程程式作業dbms_schedulerOracle
- oracle使用DBMS_SCHEDULER排程作業Oracle
- Oracle 排程程式作業( dbms_scheduler )Oracle
- MySQL入門--EVENT(事件)MySql事件
- 【I/O scheduler】Linux的磁碟排程策略Linux
- Flink排程之排程器、排程策略、排程模式模式
- 基於事件的排程事件
- kube-scheduler原始碼分析(3)-搶佔排程分析原始碼
- Go排程器系列(2)巨集觀看排程器Go
- Android非同步框架RxJava 1.x系列(三) - 執行緒排程器SchedulerAndroid非同步框架RxJava執行緒
- Crane-scheduler:基於真實負載進行排程負載
- 使用DBMS_SCHEDULER排程作業系統shell指令碼作業系統指令碼
- 如何在 JavaScript 中實現 Event Bus(事件匯流排)JavaScript事件
- Go語言排程器之主動排程(20)Go
- Go排程器系列(3)圖解排程原理Go圖解
- MySQL 配置InnoDB清理排程MySql
- Oracle無法自動排程DBMS_JOB&DBMS_SCHEDULER案例分析Oracle
- 瀏覽器事件迴圈Event Loop瀏覽器事件OOP
- 【技術乾貨】華為雲FusionInsight MRS的自研超級排程器Superior Scheduler
- Go runtime 排程器精講(二):排程器初始化Go
- 排程器簡介,以及Linux的排程策略Linux
- Go語言排程器之排程main goroutine(14)GoAI
- Go runtime 排程器精講(五):排程策略Go
- Node.js Event Loop與瀏覽器 Event Loop(事件環)Node.jsOOP瀏覽器事件
- Oracle事件驅動的排程作業Oracle事件
- 全面學習ORACLE Scheduler特性(5) Schedules排程Programs執行的JobsOracle