這篇文章將為大家詳細(xì)講解有關(guān)MySQL 5.1事件調(diào)度器中狀態(tài)查看、開啟命令以及測(cè)試的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)公司從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元沂源做網(wǎng)站,已為上家服務(wù),為沂源各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
自MySQL5.1.6起,增加了一個(gè)非常有特色的功能–事件調(diào)度器(Event Scheduler),可以用做定時(shí)執(zhí)行某些特定任務(wù)(例如:刪除記錄、對(duì)數(shù)據(jù)進(jìn)行匯總等等),來取代原先只能由操作系統(tǒng)的計(jì)劃任務(wù)來執(zhí)行的工作。更值得一提的是MYSQL的事件調(diào)度器可以精確到每秒鐘執(zhí)行一個(gè)任務(wù),而操作系統(tǒng)的計(jì)劃任務(wù)(如:下的CRON或Windows下的任務(wù)計(jì)劃)只能精確到每分鐘執(zhí)行一次。對(duì)于一些對(duì)數(shù)據(jù)實(shí)時(shí)性要求比較高的應(yīng)用(例如:股票、賠率、比分等)就非常適合。
事件調(diào)度器有時(shí)也可稱為臨時(shí)觸發(fā)器(temporal triggers),因?yàn)槭录{(diào)度器是基于特定時(shí)間周期觸發(fā)來執(zhí)行某些任務(wù),而觸發(fā)器(Triggers)是基于某個(gè)表所產(chǎn)生的事件觸發(fā)的,區(qū)別也就在這里。
在使用這個(gè)功能之前必須確保event_scheduler已開啟,可執(zhí)行
SET GLOBAL event_scheduler = 1;
或我們可以在配置my.ini文件 中加上 event_scheduler = 1或
SET GLOBAL event_scheduler = ON;
來開啟,也可以直接在啟動(dòng)命令加上“–event_scheduler=1”,例如:
d ... --event_scheduler=1
要查看當(dāng)前是否已開啟事件調(diào)度器,可執(zhí)行如下SQL:
SHOW VARIABLES LIKE 'event_scheduler';
或
SELECT @@event_scheduler;
或
擁有 SUPER 權(quán)限的賬戶執(zhí)行 SHOW PROCESSLIST 就可以看到這個(gè)線程了
5.3、定時(shí)服務(wù)配置
先來看一下它的語法:
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
schedule:
AT TIMESTAMP [+ INTERVAL INTERVAL]
| EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]
INTERVAL:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
5.3.1每秒插入一條記錄到數(shù)據(jù)表
USE test;
CREATE TABLE aaa (timeline TIMESTAMP);
CREATE EVENT e_test_insert
ON SCHEDULE EVERY 1 SECOND
DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);
等待3秒鐘后,再執(zhí)行查詢看看:
mysql> SELECT * FROM aaa;
+---------------------+
| timeline |
+---------------------+
| 2007-07-18 20:44:26 |
| 2007-07-18 20:44:27 |
| 2007-07-18 20:44:28 |
+---------------------+
5.3.2 5秒(天)后清空test表
CREATE EVENT e_test
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 SECOND
DO TRUNCATE TABLE test.aaa;
CREATE EVENT e_test
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
5.3.3 2008年5月23日9點(diǎn)39分20秒整清空test表
CREATE EVENT e_test
ON SCHEDULE AT TIMESTAMP '2008-05-23 9:39:20'
DO TRUNCATE TABLE test.aaa;
這個(gè)測(cè)試有問題。還不太明白原因。
5.3.4 每天定時(shí)清空test表
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
DO TRUNCATE TABLE test.aaa;
5.3.5 5天后開啟每天定時(shí)清空test表
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
這里5天也可以為0天,當(dāng)時(shí)就開啟清空表
5.3.6 每天定時(shí)清空test表,5天后停止執(zhí)行
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
該設(shè)置要求天數(shù)大于1,否則報(bào)錯(cuò)。而且創(chuàng)建不成功
5.3.7 5天后開啟每天定時(shí)清空test表,一個(gè)月后停止執(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;[ON COMPLETION [NOT] PRESERVE]
可以設(shè)置這個(gè)事件是執(zhí)行一次還是持久執(zhí)行,默認(rèn)為NOT PRESERVE。
該事件會(huì)停止每隔一秒插入數(shù)據(jù)的事件,感覺這點(diǎn)上mysql做的還是有問題。
5.3.8 每天定時(shí)清空test表(只執(zhí)行一次,任務(wù)完成后就終止該事件)
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ON COMPLETION NOT PRESERVE
DO TRUNCATE TABLE test.aaa;
[ENABLE | DISABLE]可是設(shè)置該事件創(chuàng)建后狀態(tài)是否開啟或關(guān)閉,默認(rèn)為ENABLE。
[COMMENT ‘comment’]可以給該事件加上注釋。
5.4、定時(shí)服務(wù)日常維護(hù)測(cè)試
5.4.1 修改事件(ALTER EVENT)
ALTER EVENT event_name
[ON SCHEDULE schedule]
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT 'comment']
[ENABLE | DISABLE]
[DO sql_statement]
a、臨時(shí)關(guān)閉事件
ALTER EVENT e_test DISABLE;
b、開啟事件
ALTER EVENT e_test ENABLE;
c、將每天清空test表改為5天清空一次:
ALTER EVENT e_test
ON SCHEDULE EVERY 5 DAY;
d、重命名事件并加上注釋
alter event test.new_e_test rename to e_test comment 'e_test_cm';
5.4.2 刪除事件(DROP EVENT)
語法很簡(jiǎn)單,如下所示:
DROP EVENT [IF EXISTS] event_name例如刪除前面創(chuàng)建的e_test事件
DROP EVENT e_test;當(dāng)然前提是這個(gè)事件存在,否則會(huì)產(chǎn)生ERROR 1513 (HY000): Unknown event錯(cuò)誤,因此最好加上IF EXISTS
DROP EVENT IF EXISTS e_test;
5.4.3 查看事件
a、查看一個(gè)event的詳細(xì)信息可以用下面的視圖:
SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'e_test_insert' AND EVENT_SCHEMA = 'test'\G;
b、簡(jiǎn)要列出所有的event:show events
語法:
SHOW EVENTS [FROM schema_name]
[LIKE 'pattern' | WHERE expr]
格式化顯示所有event
SHOW EVENTS\G
格式化顯示test用戶的event
show events FROM test;
c、查看event的創(chuàng)建信息
SHOW CREATE EVENT event_name
show create event test.e_test\G
關(guān)于“mysql 5.1事件調(diào)度器中狀態(tài)查看、開啟命令以及測(cè)試的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。