概述
事件調(diào)度器是MySQL5.1后新增的功能闽晦,可以將數(shù)據(jù)庫按自定義的時(shí)間周期觸發(fā)某種操作匪蟀,可以理解為時(shí)間觸發(fā)器,類似于linux系統(tǒng)下面的任務(wù)調(diào)度器crontab闻蛀,或者類似與window下面的計(jì)劃任務(wù)
匪傍。值得一提的是MySQL的事件調(diào)度器可以精確到每秒鐘執(zhí)行一個(gè)任務(wù),而操作系統(tǒng)的計(jì)劃任務(wù)(如:Linux下的CRON或Windows下的任務(wù)計(jì)劃)只能精確到每分鐘執(zhí)行一次觉痛。
查看事件功能是否開啟
在使用事件這個(gè)功能役衡,首先要保證你的mysql的版本是5.1以上,然后還要查看你的mysql服務(wù)器上的事件是否開啟薪棒。
查看事件是否開啟手蝎,使用如下命令查看:
#方式一
SHOW VARIABLES LIKE 'event_scheduler';
#方式二
SELECT @@event_scheduler;
#方式三
SHOW PROCESSLIST;
#查看事件狀態(tài)
SHOW EVENTS;
如果看到event_scheduler為on或者PROCESSLIST中顯示有event_scheduler的信息說明就已經(jīng)開啟了事件。如果顯示為off或者在PROCESSLIST中查看不到event_scheduler的信息俐芯,那么就說明事件沒有開啟棵介,我們需要開啟它。
開啟事件功能
方式一吧史、通過動(dòng)態(tài)參數(shù)修改
SET GLOBAL event_scheduler = ON;
更改完這個(gè)參數(shù)就立刻生效了邮辽,但是重啟mysql又還原了,即設(shè)置不能跨重啟贸营。
方式二逆巍、更改配置文件然后重啟
在my.cnf中的[mysqld]部分添加如下內(nèi)容,然后重啟mysql莽使。
event_scheduler=ON;
一勞永逸,需要能夠修改數(shù)據(jù)庫配置的權(quán)限笙僚。
方式三芳肌、直接在啟動(dòng)命令加上“–event_scheduler=1”
mysqld ... --event_scheduler=ON
事件的語法
1. 創(chuàng)建事件
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: 定義事件執(zhí)行的時(shí)候檢查權(quán)限的用戶。
ON SCHEDULE schedule: 定義執(zhí)行的時(shí)間和時(shí)間間隔肋层。
ON COMPLETION [NOT] PRESERVE: 定義事件是一次執(zhí)行還是永久執(zhí)行亿笤,默認(rèn)為一次執(zhí)行,即NOT PRESERVE栋猖。
ENABLE | DISABLE | DISABLE ON SLAVE: 定義事件創(chuàng)建以后是開啟還是關(guān)閉净薛,以及在從上關(guān)閉。如果是從服務(wù)器自動(dòng)同步主上的創(chuàng)建事件的語句的話蒲拉,會(huì)自動(dòng)加上DISABLE ON SLAVE肃拜。
COMMENT 'comment': 定義事件的注釋痴腌。
2. 更改事件
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]
3. 刪除事件的語法
DROP EVENT [IF EXISTS] event_name;
事件使用舉例
1. 創(chuàng)建事件
舉例一
定時(shí)每隔3秒向表test2中插入數(shù)據(jù)
create event event_insert_t2
on schedule every 3 second
on completion preserve
do insert into test2(department,time_v) value('1',now());
執(zhí)行結(jié)果
舉例二
創(chuàng)建一個(gè)10分鐘后清空test表數(shù)據(jù)的事件
CREATE EVENT IF NOT EXISTS event_truncate_test2
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 10 MINUTE
DO TRUNCATE TABLE test2;
舉例三
創(chuàng)建一個(gè)在2015-04-17 14:42:00時(shí)刻清空test表數(shù)據(jù)的事件
DROP EVENT IF EXISTS event_truncate_test2;
CREATE EVENT event_truncate_test2
ON SCHEDULE
AT TIMESTAMP '2015-04-17 14:42:00'
DO TRUNCATE TABLE test2;
舉例四
5天后開啟每天定時(shí)3秒向表test2中插入數(shù)據(jù),一個(gè)月后停止執(zhí)行
CREATE EVENT IF NOT EXISTS event_truncate_test2
ON SCHEDULE EVERY 3 SECOND
STARTS CURRENT_TIMESTAMP + INTERVAL 5 day
ENDS CURRENT_TIMESTAMP + INTERVAL 1 month
ON COMPLETION PRESERVE
DO INSERT INTO test2(department,time_v) VALUES('1',NOW());
修改事件舉例
舉例一
臨時(shí)關(guān)閉事件
alter event event_insert_t2 disable;
其他類似創(chuàng)建事件燃领。
刪除事件舉例
DROP EVENT IF EXISTS event_insert_t2;
事件調(diào)用存儲(chǔ)過程或函數(shù)如同普通調(diào)用士聪。
事件的優(yōu)缺點(diǎn)及應(yīng)用場(chǎng)景
- 優(yōu)點(diǎn)
- 定時(shí)任務(wù)由dba統(tǒng)一管理,避免部署在操作系統(tǒng)層猛蔽。
- 減少系統(tǒng)管理員產(chǎn)生誤操作的風(fēng)險(xiǎn)剥悟。
- 有利于后續(xù)的管理和維護(hù)。
- 缺點(diǎn)
- 在繁忙且要求性能的數(shù)據(jù)庫上慎重部署和啟用調(diào)度器曼库。
- 過于復(fù)雜的處理更適合使用程序?qū)崿F(xiàn)区岗。
- 開啟和關(guān)閉事件需要具有超級(jí)用戶權(quán)限。
- 應(yīng)用場(chǎng)景
適用于定期收集統(tǒng)計(jì)信息毁枯,定期清除歷史數(shù)據(jù)慈缔,定期數(shù)據(jù)庫檢查等等。
參考
http://blog.163.com/duanpeng3@126/blog/static/8854373520105182123112/
http://blog.chinaunix.net/uid-20639775-id-3323098.html