以前一直使用quartz建立定時任務,但是有時候定時任務一多,總感覺在某個時間段內集中進行定時任務會對tomcat造成比較大的壓力(對不起,這是我猜的。。。),所以後來就發現mysql 在5.1之後新增了事件排程器(event scheduler)。而且如果是定時呼叫乙個儲存過程,會比使用quartz簡單的多。
①檢視event是否開啟:
如果是off,則代表關閉。
開啟事件排程的方法:
func1.執行:set global event_scheduler = 1 ;
或:set global event_scheduler = on ;
func2.在my.cnf中(windows環境下是my.ini)修改[mysqld]下的配置:--event_scheduler=1。
②建立事件:
語法:create event [if not exist] event_name
on schedule schedule
[on completion [not] preserve]
[enable | disable]
[commnet 'comment']
do sql_statement ;
[on completion [not] preserve]可以設定這個事件是執行一次還是持久執行,預設為not preserve。
其中語法中的'schedule'代表的是要定時執行的時間
schedule:
at timestamp [+interval interval]
| every interval [starts timestamp] [end timestamp]
上句中的interval代表『間隔』的意思,
quantity
do後邊的語句是要執行的任務,可以是乙個sql語句,也可以是儲存過程等。
③檢視意建立的定時任務:
(此時需要root授權)
func1:select * from mysql.event ;
func2:show events ;
func3:show create event event_nam;此時可檢視詳細的任務內容,如:show create event e_cancel_foodorder ;
④開啟定時任務:
alter event e_cancel_foodorder on
completion preserve
enable ;
⑤關閉定時任務:
alter event e_cancel_foodorder
oncompletion preserve
disable ;
(如果將此event執行了關閉後,重啟mysql會刪除掉該定時任務)
⑥修改定時任務:
alter event e_cancel_foodorder on schedule every 5 day ;(將每天執行修改為5天執行一次)
⑦刪除定時任務:
drop event [if exists] event_name ;
⑧建立定時任務的示例:
每分鐘執行一次:
create event `e_cancel_foodorder`
on schedule every 1 minute
do update food_order set status=8 where status=2 and timestampdiff(minute,time2,now())>10 ;
every 後面的是時間間隔,可以選 1 second,3 min
ute,5 ho
ur,9
day,1 month,1 quarter(季度),1 year
每天0點1分定點執行:
create event `e_cancel_foodorder`
on schedule every 1 day starts '2015-12-29 00:01:00'
do update food_order set status=8 where status=2 and timestampdiff(minute,time2,now())>10 ;
從現在開始每隔九天定時執行:
onschedule every 9 day starts now()
;
每個月的一號凌晨1 點執行
on schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour);
每個季度一號的凌晨1點執行
on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour);
每年1月1號凌晨1點執行
on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour);
mysql用event設定定時任務
mysql設定定時任務 需求 mysql資料庫裡面做個定時任務自動每天建立一張表。1.檢視是否開啟event與開啟event show variables like sche 若未開啟,set global event scheduler 1 2.建立儲存過程 每天建立乙個名為 test 年月日的表...
mysql 定時任務 生效 mysql定時任務
1.檢視是否開啟定時策略 show variables like event sche 若出現如下圖,則此時是關閉狀態 開啟定時策略 重啟無效 set global event scheduler 1 則需要在配置檔案my.ini的設定 重啟有效 mysqld event scheduler on ...
mysql 定時任務
檢視event是否開啟 複製 如下 show variables like sche 將事件計畫開啟 複製 如下 set global event scheduler 1 建立儲存過程test 複製 如下 create procedure test begin update examinfo set...