天天看點

Mysql定時任務配置詳細說明

作者:素手挽清風LINDA

1. 定時任務(Event)簡介

自MySQL5.1.6起,增加了一個非常有特色的功能-事件排程器(Event Scheduler),可以用做定時執行某些特定任務(例如:删除記錄、對資料進行彙總、資料備份等等),來取代原先隻能由外部程式的計劃任務來執行的工作。

2. 定時任務(Event)優缺點

優點:一些對于資料的定時操作不再依賴于外部程式,而可以直接利用資料庫本身提供的功能,增加了快捷友善性。Mysql的定時任務可以實作每秒鐘執行1個任務,而作業系統的計劃任務(如:Linux的cron或Windows下的任務計劃)隻能精确到每分鐘執行一次,這在對實時性要求高的環境下就非常實用。

缺點:定時觸發,不可以調用

3. 具體操作

(1) 檢視資料庫定時政策是否開啟,輸入以下指令:

show variables like '%event_sche%';

運作結果如下:

Mysql定時任務配置詳細說明

如果是OFF表示沒有開啟,修改成ON,輸入以下指令:

set global event_scheduler=1;

修改後查再看一次據庫定時政策是否開啟。

(2) 建立procedure(存儲過程),比如建立demo_insert作為執行體:

create procedure demo_insert()

BEGIN

INSERT INTO testdata set name="test2",shuju=20;

END

提示:begin和end中間放要定時處理的sql用 ;結尾,可以放多個sql

(3) 建立定時任務,比如建立名為demo01的定時任務:

create event demo01

-- 每10分鐘執行一次

ON SCHEDULE EVERY 10 MINUTE

on completion preserve disable

-- 任務使用第二點定義的demo_insert作為執行體

do call demo_inser();

(4) 檢視任務建立情況:

SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;

(5) 把指定的任務開啟:

ALTER EVENT demo01 ON COMPLETION PRESERVE ENABLE;

提示:

關閉指定的任務指令為:ALTER EVENT demo01 ON COMPLETION PRESERVE DISABLE;

删除指定的任務指令為:drop event demo01;

(6) 檢視指定任務的詳細資訊:

SELECT * FROM information_schema.EVENTS WHERE event_name='demo01';

4. 注意事項:

(1) event_scheduler的修改會随着資料庫伺服器重新開機恢複到原來狀态,設定開機自動開啟需要配置mysql的配置檔案my.ini添加下面的一行配置:

[mysqld]

event_scheduler=ON

(2) 對于任務的執行方式總結了一些時間控制的指令:

Mysql定時任務配置詳細說明

5. 用navicat建立(推薦)

Mysql定時任務配置詳細說明

如上圖左鍵點選建立事件。

建立事件中的定義一欄是寫執行sql的,可以包括一條或多條sql語句、存儲過程等,計劃一欄是定義事件觸發時間的。如下圖所示:

Mysql定時任務配置詳細說明

打開計劃欄:

Mysql定時任務配置詳細說明

上圖的參數說明:

AT:表示該事件隻執行一次,可以設定一個具體的時間,也可以如圖中current_timestamp代表目前時間(預設),後面可以加上一個時間間隔INTERVAL,表示在這個時間多久以後後事件發生,表示延遲觸發時間。

EVERY:循環執行該事件,其中STARTS子句用于指定開始時間。

ENDS:子句用于指定結束時間。

INTERVAL:表示從現在開始時間延遲多久以後的一個時間點,其值由一個數值和機關構成。例如,使用“1 week”表示41周後;使用“‘6:30' hour_minute”表示6小時30分鐘後。事件的間隔的距離用date_add()函數來支配。

補充說明:INTERVAL中包含的時間機關如下:

year | quarter | month | day | hour | minute | week | second | year_month | day_hour | day_minute | day_second | hour_minute | hour_second | minute_second

舉例1:往testdata表中插入2行資料,執行時間:2023-01-16 15:00:00

Mysql定時任務配置詳細說明

點選儲存,輸入定義的事件名。

上面定義的時間過後,查詢結果如下圖所示:

Mysql定時任務配置詳細說明

舉例2:從目前開始,每5秒往testdata表中插入2行資料,如下圖所示:

Mysql定時任務配置詳細說明