想在每天某個特定時間段定時執行一條sql語句命令,來進行數據庫的備份或者更新刪除等,可以直接使用MySQL自帶的定時任務Event事件來執行操作。需要注意的是Event事件是在MySQL 5.1版本中新增的,還有一點就是確保你有MySQL數據庫的root管理權限,因為Event默認是關閉狀態需要用root權限開啟 下面會給出開啟方法。
查看Event事件是否開啟
1、查看MySQL是否開啟event,執行下面的命令。
SHOW?VARIABLESLIKE'event_scheduler';
如果顯示OFF,說明是關閉狀態需要開啟。
2、 開啟event,使用下面的命令 。
SETGLOBALevent_scheduler?=?1;
執行完后再次查看event狀態,ON為開啟。
Event 事件語法說明
語法
CREATE
[DEFINER?=?{?user|CURRENT_USER}]
EVENT
[IF?NOTEXISTS]
event_name
ONSCHEDULE?schedule
[ONCOMPLETION?[NOT]?PRESERVE]
[ENABLE?|?DISABLE?|?DISABLE?ONSLAVE]
[COMMENT?'string']
DO?event_body;
schedule:
ATtimestamp[+?INTERVAL?interval]?...
|?EVERY?interval
[STARTS?timestamp[+?INTERVAL?interval]?...]
[ENDS?timestamp[+?INTERVAL?interval]?...]
interval:
quantity?{YEAR|?QUARTER?|MONTH|DAY|HOUR|MINUTE|?WEEK?|SECOND|?YEAR_MONTH?|?DAY_HOUR?|?DAY_MINUTE?|?DAY_SECOND?|?HOUR_MINUTE?|?HOUR_SECOND?|?MINUTE_SECOND}
語法說明
DEFINER:指定可執行該定時器的MySQL賬號,user的格式是’user_name’@’host_name’,CURRENT_USER或CURRENT_USER(),注意,單引號是需要在語句中輸入的。如果不指定,默認是DEFINER = CURRENT_USER。
event_name:事件名稱,最大64個字符,不區分大小寫,MyEvent和myevent是一樣的,命名規則和其他MySQL對象是一樣的。
ON SCHEDULE schedule: 指定何時執行,下文詳細說明。
[ON COMPLETION [NOT] PRESERVE]:可選,preserve是保持的意思,這里是說這個定時器第一次執行完成以后是否還需要保持,如果是NOT PRESERVE,該定時器只執行一次,完成后自動刪除事件;沒有NOT,該定時器會多次執行,可以理解為這個定時器是持久性的。默認是NOT PRESERVE。
[ENABLE | DISABLE | DISABLE ON SLAVE]:可選,是否啟用該事件,ENABLE-啟用,DISABLE-禁用,可使用alter event語句修改該狀態。DISABLE ON SLAVE是指在主備復制的數據庫服務器中,在備機上也創建該定時器,但是不執行。
COMMENT: 注釋,必須用單引號括住。
DO event_body:事件要執行的SQL語句,可以是一個SQL,也可以是使用BEGIN和END的復合語句,和存儲過程相同。
ON SCHEDULE 事件的執行時間
ON SCHEDULE指定事件何時執行,執行的頻率和執行的時間段,有AT和EVERY兩種形式。
AT(在指定的時間只執行一次)
AT語法AT timestamp,用于只執行一次事件。執行的時間由timestamp指定,timestamp必須包含完整的日期和時間,即年月日時分秒都要有。可以使用DATETIME或TIMESTAMP類型,或者可以轉換成時間的值,例如“2018-01-21 00:00:00”。如果指定是時間是過去的時間,該事件不會執行,并會生成警告。
可以使用CURRENT_TIMESTAMP(當前時間的意思)指定執行時間,這樣的話,事件創建成功會立即執行。
如果事件執行的時間是未來的某個時間點,可以使用+ INTERVAL interval指定具體時間。interval有數字(quantity) 和 時間單位(Unit of time)兩部分組成,例如:2分10秒后執行,應寫為 + INTERVAL ‘2:10’,可用的時間單位有很多,列表如下圖:
AT小例子
1小時后執行該事件。創建名字為myevent的事件,ON SCHEDULE指定時間,DO要執行的sql語句
CREATE
EVENT?myevent
ONSCHEDULE
SCHEDULE?ATCURRENT_TIMESTAMP+?INTERVAL?1HOUR
DO
UPDATEmyschema.mytableSETmycol?=?mycol?+?1;
Every(每間隔多久執行一次)
如果需要讓事件定時執行,使用Every這種方式。注意Every后邊沒有+ INTERVAL,時間格式和單位和上面的相同。
Every小例子
EVERY?20?second每20秒執行一次
CREATE
EVENT?myevent
ONSCHEDULE
EVERY?20?second
DO
UPDATEmyschema.mytableSETmycol?=?mycol?+?1;
EVERY后面可以跟可選的STARTS和ENDS,指定事件開始和結束時間,在這個時間段內,時間定時執行。STARTS和ENDS可同時指定,或者只指定STARTS,或兩者都不指定。
更多案例
EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + INTERVAL 1 WEEK 一周以后開始,每隔三個月
EVERY 2 WEEK STARTS CURRENT_TIMESTAMP + INTERVAL ‘6:15’ HOUR_MINUTE 六個小時15分鐘以后,每隔兩周
EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK 30分鐘以后開始,4周后結束,每隔12個小時
例子:每天凌晨執行
use 指定名為WordPress的數據庫,在每天凌晨將wp_vod數據表中的,vod_day字段值設為0
use?WordPress;
CREATE
EVENT?myevent
ONSCHEDULE
EVERY?1?DAYSTARTS?'2019-01-01?00:00:00'
DO
updatewp_vodsetvod_day?=?0;
刪除Event事件
語句很簡單 ,后面myevent為事件名
dropevent?myevent;
MySQL服務器重啟 斷電會導致事件關閉
整個服務器重啟、斷電會導致event事件恢復成默認OFF關閉狀態,想解決這個問題,則需要在mysql.ini文件中修改加入event_scheduler?=?ON;