詳解MySQL新增的功能(事件調度器)實例

概述

事件調度器是事件5.1后事件的功能,可以將數據庫按自定義的時間周期觸發某種操作,可以理解為時間事件,類似于事件系統下面的任務調度器crontab,或者類似與window下面的計劃任務。值得一提的是mysql的事件調度器可以精確到每秒鐘執行一個任務,而操作系統的計劃任務(如:linux下的cron或windows下的任務計劃)只能精確到每分鐘執行一次。

查看事件功能是否開啟

在使用事件這個功能,首先要保證你的mysql的版本是5.1以上,然后還要查看你的mysql服務器上的事件是否開啟。
查看事件是否開啟,使用如下命令查看:

#方式一  SHOW?VARIABLES?LIKE?'event_scheduler';  #方式二  SELECT?@@event_scheduler;  #方式三  SHOW?PROCESSLIST;    #查看事件狀態  SHOW?EVENTS;

如果看到event_scheduler為on或者PROCESSLIST中顯示有event_scheduler的信息說明就已經開啟了事件。如果顯示為off或者在PROCESSLIST中查看不到event_scheduler的信息,那么就說明事件沒有開啟,我們需要開啟它。

開啟事件功能

方式一、通過動態參數修改

SET?GLOBAL?event_scheduler?=?ON;

更改完這個參數就立刻生效了,但是重啟mysql又還原了,即設置不能跨重啟。
方式二、更改事件然后重啟
在my.cnf中的[mysqld]部分添加如下內容,然后重啟mysql。

event_scheduler=ON;

一勞永逸,需要能夠修改數據庫配置的權限。

方式三、直接在啟動命令加上“–event_scheduler=1”

mysqld?...?--event_scheduler=ON

事件的語法

1. ?創建事件

CREATE  ????[DEFINER?=?{?user?|?CURRENT_USER?}]  ????EVENT  ????[IF?NOT?EXISTS]  ????event_name  ????ON?SCHEDULE?schedule  ????[ON?COMPLETION?[NOT]?PRESERVE]  ????[ENABLE?|?DISABLE?|?DISABLE?ON?SLAVE]  ????[COMMENT?'comment']  ????DO?event_body;    schedule:  ????AT?timestamp?[+?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: 定義事件執行的時候檢查權限的用戶。
ON SCHEDULE schedule: 定義執行的時間和時間間隔。
ON COMPLETION [NOT] PRESERVE: 定義事件是一次執行還是永久執行,默認為一次執行,即NOT PRESERVE。
ENABLE | DISABLE | DISABLE ON SLAVE: 定義事件創建以后是開啟還是關閉,以及在從上關閉。如果是從服務器自動同步主上的創建事件的語句的話,會自動加上DISABLE ON SLAVE。
COMMENT ‘comment’: 定義事件的事件

2. ?更改事件

ALTER  ????[DEFINER?=?{?user?|?CURRENT_USER?}]  ????EVENT?event_name  ????[ON?SCHEDULE?schedule]  ????[ON?COMPLETION?[NOT]?PRESERVE]  ????[RENAME?TO?new_event_name]  ????[ENABLE?|?DISABLE?|?DISABLE?ON?SLAVE]  ????[COMMENT?'comment']  ????[DO?event_body]

3. 事件事件的語法

DROP?EVENT?[IF?EXISTS]?event_name;

事件使用舉例

1. 創建事件

舉例一
定時每隔3秒向表test2中事件

create?event?event_insert_t2  on?schedule?every?3?second  on?completion?preserve  do?insert?into?test2(department,time_v)?value('1',now());

執行結果

詳解MySQL新增的功能(事件調度器)實例

事件執行結果

舉例二
創建一個10分鐘后清空test表數據的事件

CREATE?EVENT?IF?NOT?EXISTS?event_truncate_test2  ON?SCHEDULE  AT?CURRENT_TIMESTAMP?+?INTERVAL?10?MINUTE  DO?TRUNCATE?TABLE?test2;

舉例三
創建一個在2015-04-17 14:42:00時刻清空test表數據的事件

DROP?EVENT?IF?EXISTS?event_truncate_test2;  CREATE?EVENT?event_truncate_test2  ON?SCHEDULE  AT?TIMESTAMP?'2015-04-17?14:42:00'  DO?TRUNCATE?TABLE?test2;

舉例四
5天后開啟每天定時3秒向表test2中插入數據,一個月后停止執行

CREATE?EVENT?IF?NOT?EXISTS?event_truncate_test2  ON?SCHEDULE?EVERY?3?SECOND  STARTS?CURRENT_TIMESTAMP?+?INTERVAL?5?day  ENDS?CURRENT_TIMESTAMP?+?INTERVAL??1?month  ON?COMPLETION?PRESERVE  DO?INSERT?INTO?test2(department,time_v)?VALUES('1',NOW());

修改事件舉例

舉例一
臨時關閉事件

alter?event?event_insert_t2?disable;

其他類似創建事件。

刪除事件舉例

DROP?EVENT?IF?EXISTS?event_insert_t2;

事件調用事件事件如同普通調用。

事件的優缺點及應用場景

  1. 優點

  2. 定時任務由dba統一管理,避免部署在操作系統層。

  3. 減少系統管理員產生誤操作的風險。

  4. 有利于后續的管理和維護。

  5. 缺點

  6. 在繁忙且要求性能的數據庫上慎重部署和啟用調度器。

  7. 過于復雜的處理更適合使用程序實現。

  8. 開啟和關閉事件需要具有超級用戶權限。

  9. 應用場景
    適用于定期收集統計信息,定期清除歷史數據,定期數據庫檢查等等。

【相關推薦】

1.?事件

2.?事件

3. 事件

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享