mysql 事件 day hour_Mysql事件调度器(Event Scheduler)
Mysql中的事件調(diào)度器Event Scheduler類似于linux下的crontab計劃任務(wù)的功能,它是由一個特殊的時間調(diào)度線程執(zhí)行的
一、查看當前是否開啟了event scheduler三種方法:
1) SHOW VARIABLES LIKE ‘event_scheduler’;
2) SELECT @@event_scheduler;
3) SHOW PROCESSLIST;(是否有State為:Waiting for next activation的進程,User為event_scheduler)
二、啟動關(guān)閉event scheduler方法:
時間調(diào)度器是否開啟由全局變量event_scheduler決定,它有三個可以設(shè)定的值: – OFF :
事件調(diào)度器是關(guān)閉的,調(diào)度線程并沒有運行,并且在SHOW PROCESSLIST中不顯示,默認值是OFF – ON
:事件調(diào)度器是開啟的,調(diào)度線程并沒有運行,并且執(zhí)行所有的調(diào)度事件,通過SHOW PROCESSLIST可以查看Waiting for next
activation的進程 – DISABLED : 設(shè)定這個值表示Event Scheduler是被禁止的,無法在Mysql運行狀態(tài)下改變其值
注:在Mysql啟動時如果在my.cnf設(shè)置了event_scheduler=ON(OFF or 1
or 0)時,就不能在運行時修改撐DISABLED,如果設(shè)置event_scheduler=DISABLED時,就不能在運行時修改其值為ON (
OFF or 1 or 0)
mysql> SELECT @@event_scheduler;
+-------------------+
| @@event_scheduler |
+-------------------+
| DISABLED |
+-------------------+
1 row in set (0.00 sec)
mysql> SET @@global.event_scheduler = 1;
ERROR 1290 (HY000): The MySQL server is running with the --event-scheduler=DISABLED or --skip-grant-tables option so it cannot execute this statement
在mysql運行時開啟Event(4種方法均可):
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;
在mysql運行時關(guān)閉Event(4種方法均可):
SET GLOBAL event_scheduler = OFF;
SET @@global.event_scheduler = OFF;
SET GLOBAL event_scheduler = 0;
SET @@global.event_scheduler = 0;
三、創(chuàng)建Event:
語法:
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO event_body;
schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
說明:
DEFINER默認是CREATE
EVENT的用戶,可以理解為DEFINER=CURRENT_USER,指該event的用戶,服務(wù)器在執(zhí)行該事件時,使用該用戶來檢查權(quán)限;如果設(shè)置語法:‘user_name’@‘host_name’,如果當前CREATE
EVENT用戶沒有supser權(quán)限,則無法將該event指派給其他用戶;如果有super權(quán)限,則可以指定任意存在的用戶,若不存在,時間執(zhí)行時報錯
IF NOT EXISTS :
如果在同一個schema創(chuàng)建一個已經(jīng)存在的event_name時不會做任何操作,也不會出錯,但會出現(xiàn)warings:該event已經(jīng)存在;如果不增加此關(guān)鍵詞已經(jīng)存在的話提示ERROR:
1537 (HY000): Event ‘countsum’ already exists
ON SCHEDULE :用于設(shè)置什么時間執(zhí)行,執(zhí)行的頻率及執(zhí)行多久的問題
AT timestamp :表示在給定的datetime或者timestamp的時間執(zhí)行一次
+ INTERVAL interval:表示從AT timestamp多久之后執(zhí)行
EVERY interval :有規(guī)律的重復(fù)執(zhí)行
[ENABLE | DISABLE]可是設(shè)置該事件創(chuàng)建后狀態(tài)是否開啟或關(guān)閉,默認為ENABLE
[COMMENT ‘comment’]可以給該事件加上注釋。
event創(chuàng)建時間的3周2天后:
AT CURRENT_TIMESTAMP + INTERVAL 3 WEEK + INTERVAL 2 DAY
2分鐘10秒:
+ INTERVAL '2:10' MINUTE_SECOND
每6周:
EVERY 6 WEEK
從現(xiàn)在開始30分鐘后每12小時執(zhí)行一次到從現(xiàn)在到4周后結(jié)束執(zhí)行:
EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK
實例:
前提:創(chuàng)建EVENT的用戶需要只少對應(yīng)schema的EVENT權(quán)限
最基本的create event只需要三個部分:
1. create event關(guān)鍵字以及一個event名稱
2. on schedule子句
3. do子句
1. 在創(chuàng)建事件myevent1小時后執(zhí)行,執(zhí)行一條更新
CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
2.2014年3月20日12點整清空test表:
CREATE EVENT e_test
ON SCHEDULE AT TIMESTAMP '2014-03-20 12:00:00'
DO TRUNCATE TABLE test.aaa;
3.5天后開啟每天定時清空test表:
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
4.每天定時清空test表,5天后停止執(zhí)行
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
5.5天后開啟每天定時清空test表,一個月后停止執(zhí)行:
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
DO TRUNCATE TABLE test.aaa;
6.每天定時清空test表(只執(zhí)行一次,任務(wù)完成后就終止該事件):
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ON COMPLETION NOT PRESERVE
DO TRUNCATE TABLE test.aaa;
[ON COMPLETION [NOT] PRESERVE]可以設(shè)置這個事件是執(zhí)行一次還是持久執(zhí)行,默認為NOT PRESERVE。
四、修改Event:
ALTER
[DEFINER = { user | CURRENT_USER }]
EVENT event_name
[ON SCHEDULE schedule]
[ON COMPLETION [NOT] PRESERVE]
[RENAME TO new_event_name]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
[DO event_body]
說明:
對于任何一個擁有定義在database里面事件的event權(quán)限的用戶都可以修改event,并且成功需改后,那個用戶就會成為此event的definer
實例:
CREATE EVENT myevent
ON SCHEDULE
EVERY 6 HOUR
COMMENT 'A sample comment.'
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
將上面的event從開始之后每6個小時執(zhí)行一次改為從開始4個小時后每12小時執(zhí)行一次
只修改schedule
ALTER EVENT myevent
ON SCHEDULE
EVERY 12 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 4 HOUR;
同時修改schedule和body
ALTER EVENT myevent
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
DO
TRUNCATE TABLE myschema.mytable;
關(guān)閉、啟動、別名、移動、刪除event:
臨時關(guān)閉某個event
ALTER EVENT myevent DISABLE;
開啟某個event
ALTER EVENT myevent ENABLE;
別名某個event
ALTER EVENT olddb.myevent
RENAME TO newdb.myevent;
將myevent從olddb庫移動到newdb庫
ALTER EVENT olddb.myevent
RENAME TO newdb.myevent;
刪除event
DROP EVENT [IF EXISTS] event_name
五、查詢Event信息:
Event信息相關(guān)表:
information_schema.events
mysql.event
查看事件的創(chuàng)建信息
show create event countsum \G
查看sem庫的events信息
USE sem;
SHOW EVENTS \G
SHOW EVENTS FROM sem;
總結(jié)
以上是生活随笔為你收集整理的mysql 事件 day hour_Mysql事件调度器(Event Scheduler)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos防御原理(区块链防ddos原理)
- 下一篇: linux删除文件夹命令(linux 删