MySQL job/定時任務/event 學習

參考文章:
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的定時任務(簡稱job)是可以通過MySQL自身實現的,相比較系統的計劃任務,MySQL自身job可以實現秒級定位,即可以精確到秒單位進行任務的執行(系統計劃任務一般是分鐘);所以MySQL的job在要求精確化的任務上有極大的優勢;MySQL 的job官方稱爲event,MySQL EVENT的原理和觸發器非常的相似,區別在於,MySQL的event是系統定時驅動執行,而觸發器是通過需求觸發進行執行的,兩者各有優勢。

MySQL event和觸發器一樣可以調用存儲過程,然而存儲過程不能調用event,event只能系統執行,對於執行需求變更,我們只能手動的去調整event。

創建語法

--------創建語法
CREATE 
    [DEFINER = { user | CURRENT_USER }] --一般不寫
    EVENT --event標識
    [IF NOT EXISTS] --如果沒有就新建,建議不寫這一行,確保每個event獨立不衝突
    event_name -- 取個event名字
    ON SCHEDULE --計劃任務標識
    schedule --計劃任務時間,有兩個參數(at 和 every),at代表當前一次,every表示每過多少時間執行一次
    [ON COMPLETION [NOT] PRESERVE] --可以不寫,默認是ON COMPLETION NOT PRESERVE 即計劃任務執行完畢後自動drop該事件;ON COMPLETION  PRESERVE則不會drop
    [ENABLE | DISABLE | DISABLE ON SLAVE] --可以不寫,默認狀態,默認是啓用狀態,可以指定爲新建關閉狀態 
    [COMMENT 'comment'] --註釋event,可以不寫
    DO --執行語句標識
    event_body; --執行的sql
 
 
 
--------------------------------------------計劃任務可以定義的時間方式:
schedule: 
    AT timestamp [+ INTERVAL interval] ... --at方式
  | EVERY interval                         --every方式
    [STARTS timestamp [+ INTERVAL interval] ...] --在at/every後可以指定什麼時候開始
    [ENDS timestamp [+ INTERVAL interval] ...]  --指定什麼時候結束
 
-------------------------------------------MySQL官方提供的時間字符,可以參考   
interval: 
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | 
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | 
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}  

步驟流程

在創建job之前,需要做以下幾件事:

1、確保系統的event事件開關是打開的,允許我們創建event;

2、確保我們創建後是在成功運行的,所以要會查看當前系統有的event

3、確保我們創建是按照需求來的,如果需要更改,我們要會更改event

查看當前系統有的event

-- 查看系統有哪些event事件
--方法一
select * from mysql.event;
 
--方法二
SELECT * FROM information_schema.events;

查看系統開關

-- 方法一
select @@event_scheduler;
 
--方法二
show variables like 'event_scheduler';

設置自動啓動

如果value是off或者是0;代表沒有開啓,我們可以手動開啓:

### 開啓event事件:
-- 方法1
set GLOBAL event_scheduler=ON;
-- 方法2
set GLOBAL event_scheduler=1;

重啓後自動啓動

設置mysql重啓後,job能自動啓動
編輯/etc/my.cnf文件,在[mysqld]下添加event_scheduler=1

mysql server重啓之後 也會將 global event_scheduler 設置爲 on 要是沒有 重啓之後 就是off.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章