Mysql定時執行任務實現方法
阿新 • • 發佈:2019-01-21
在開發過程中經常會遇到這樣一個問題:
每天必須定時去執行一條sql語句 或更新或刪除或執行特定的sql語句。
mysql的客戶端工具Navicat for MySQL提供了計劃任務的形式,可以很好地實現該功能,而且也確實可行,比如像定時備份就做的很好。
然而當在執行的語句中包含有中文的時候,卻無法定時執行了。
那麼就想到用mysql的event計劃任務去實現:
要想執行event事件,就必須保證mysql的版本的5.1.6以上,否則會報如下錯誤:
1、要想保證能夠執行event事件,就必須保證定時器是開啟狀態,預設為關閉狀態
setGLOBAL event_scheduler = 1;
或
setGLOBAL event_scheduler = ON;
要檢視當前是否已開啟事件排程器,可執行如下SQL:
SHOW
VARIABLES LIKE 'event_scheduler'
2、如果原來存在該名字的任務計劃則先刪除
drop event if exist upload_to_sdmp;
3、執行事件
event事件語法格式:
<pre name="code" class="sql">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}
例如: -- 設定時區並設定計劃事件排程器開啟,也可以 event_scheduler = ON
set time_zone = '+8:00'; set GLOBAL event_scheduler = 1; -- 設定該事件使用或所屬的資料庫base資料庫 use test; # 如果原來存在該名字的任務計劃則先刪除 drop event if exists upload_to_sdmp; # 設定分隔符為 '$$' ,mysql預設的語句分隔符為 ';' ,這樣在後續的 create 到 end 這段程式碼都會看成是一條語句來執行 DELIMITER $$ # 建立計劃任務,設定第一次執行時間為'2014-07-30 10:00:00',並且每天執行一次 create event upload_to_sdmp on schedule every 1 day starts timestamp '2014-07-30 10:00:00' #on schedule every 1 SECOND do # 開始該計劃任務要做的事 begin -- do something 編寫你的計劃任務要做的事 INSERT aaa VALUES (3,'222'); INSERT aaa VALUES (2,'222'); -- 結束計劃任務 end $$ # 將語句分割符設定回 ';' DELIMITER ;
4、查詢事件的執行狀態
修改事件語法格式:
ALTER EVENT event_name
[ON SCHEDULE schedule]
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT 'comment']
[ENABLE | DISABLE]
[DO sql_statement]
5、關閉\開啟事件:
關閉事件:
ALTER EVENT upload_to_sdmp DISABLE;
開啟事件:
ALTER EVENT upload_to_sdmp ENABLE;
6、查詢事件是否開啟
select * from mysql.event
注意:真實的開發環境中,會遇到mysql服務重啟或者斷電的情況,此時則會出現事件排程器被關閉的情況,所有事件都不在起作用,要想解決這個辦法,則需要在mysql.ini檔案中加入event_scheduler = ON; 的語句
參考文獻:http://blog.csdn.net/zhanglifu081022/article/details/12689745