MySQL job/定時(shí)任務(wù)/event 學(xué)習(xí)
參考文章:
https://blog.csdn.net/qq_21108311/article/details/82589850
https://blog.csdn.net/qq_27238185/article/details/56271877
https://blog.csdn.net/lxpbs8851/article/details/8019965
概要簡述
原文鏈接:https://blog.csdn.net/qq_21108311/article/details/82589850
MySQL的定時(shí)任務(wù)(簡稱job)是可以通過MySQL自身實(shí)現(xiàn)的,相比較系統(tǒng)的計(jì)劃任務(wù),MySQL自身job可以實(shí)現(xiàn)秒級(jí)定位,即可以精確到秒單位進(jìn)行任務(wù)的執(zhí)行(系統(tǒng)計(jì)劃任務(wù)一般是分鐘);所以MySQL的job在要求精確化的任務(wù)上有極大的優(yōu)勢(shì);MySQL 的job官方稱為event,MySQL EVENT的原理和觸發(fā)器非常的相似,區(qū)別在于,MySQL的event是系統(tǒng)定時(shí)驅(qū)動(dòng)執(zhí)行,而觸發(fā)器是通過需求觸發(fā)進(jìn)行執(zhí)行的,兩者各有優(yōu)勢(shì)。
MySQL event和觸發(fā)器一樣可以調(diào)用存儲(chǔ)過程,然而存儲(chǔ)過程不能調(diào)用event,event只能系統(tǒng)執(zhí)行,對(duì)于執(zhí)行需求變更,我們只能手動(dòng)的去調(diào)整event。
創(chuàng)建語法
--------創(chuàng)建語法
CREATE
[DEFINER = { user | CURRENT_USER }] --一般不寫
EVENT --event標(biāo)識(shí)
[IF NOT EXISTS] --如果沒有就新建,建議不寫這一行,確保每個(gè)event獨(dú)立不沖突
event_name -- 取個(gè)event名字
ON SCHEDULE --計(jì)劃任務(wù)標(biāo)識(shí)
schedule --計(jì)劃任務(wù)時(shí)間,有兩個(gè)參數(shù)(at 和 every),at代表當(dāng)前一次,every表示每過多少時(shí)間執(zhí)行一次
[ON COMPLETION [NOT] PRESERVE] --可以不寫,默認(rèn)是ON COMPLETION NOT PRESERVE 即計(jì)劃任務(wù)執(zhí)行完畢后自動(dòng)drop該事件;ON COMPLETION PRESERVE則不會(huì)drop
[ENABLE | DISABLE | DISABLE ON SLAVE] --可以不寫,默認(rèn)狀態(tài),默認(rèn)是啟用狀態(tài),可以指定為新建關(guān)閉狀態(tài)
[COMMENT 'comment'] --注釋event,可以不寫
DO --執(zhí)行語句標(biāo)識(shí)
event_body; --執(zhí)行的sql
--------------------------------------------計(jì)劃任務(wù)可以定義的時(shí)間方式:
schedule:
AT timestamp [+ INTERVAL interval] ... --at方式
| EVERY interval --every方式
[STARTS timestamp [+ INTERVAL interval] ...] --在at/every后可以指定什么時(shí)候開始
[ENDS timestamp [+ INTERVAL interval] ...] --指定什么時(shí)候結(jié)束
-------------------------------------------MySQL官方提供的時(shí)間字符,可以參考
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
步驟流程
在創(chuàng)建job之前,需要做以下幾件事:
1、確保系統(tǒng)的event事件開關(guān)是打開的,允許我們創(chuàng)建event;
2、確保我們創(chuàng)建后是在成功運(yùn)行的,所以要會(huì)查看當(dāng)前系統(tǒng)有的event
3、確保我們創(chuàng)建是按照需求來的,如果需要更改,我們要會(huì)更改event
查看當(dāng)前系統(tǒng)有的event
-- 查看系統(tǒng)有哪些event事件
--方法一
select * from mysql.event;
--方法二
SELECT * FROM information_schema.events;
查看系統(tǒng)開關(guān)
-- 方法一
select @@event_scheduler;
--方法二
show variables like 'event_scheduler';
設(shè)置自動(dòng)啟動(dòng)
如果value是off或者是0;代表沒有開啟,我們可以手動(dòng)開啟:
### 開啟event事件:
-- 方法1
set GLOBAL event_scheduler=ON;
-- 方法2
set GLOBAL event_scheduler=1;
重啟后自動(dòng)啟動(dòng)
設(shè)置mysql重啟后,job能自動(dòng)啟動(dòng)
編輯/etc/my.cnf文件,在[mysqld]下添加event_scheduler=1
mysql server重啟之后 也會(huì)將 global event_scheduler 設(shè)置為 on 要是沒有 重啟之后 就是off.

浙公網(wǎng)安備 33010602011771號(hào)