1. 程式人生 > >Mysql定時執行任務實現方法

Mysql定時執行任務實現方法

在開發過程中經常會遇到這樣一個問題:

每天必須定時去執行一條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



相關推薦

no