首頁  >  文章  >  資料庫  >  mysql event事件調度器的圖文程式碼詳解

mysql event事件調度器的圖文程式碼詳解

黄舟
黄舟原創
2017-03-29 13:17:241485瀏覽

下面小編就為大家帶來一篇老生常談mysql event事件調度器(必看篇)。 ##概述

MySQL也有自己的事件調度器,簡單可以理解為linux的crontab job,不過對於SQL應用來說,它的功能更齊全,也更容易維護。

#總開關

參數event_scheduler為事件調度器的總開關,一般來說設定為ON或OFF就好,不建議設定成disabled,若設定為ON,show processlist可看到該執行緒

創建,修改,檢視等語法

關於如何創建,修改event這裡不做敘述,創建語法如下,具體的含義可參考下面關於event信息表介紹。 refman/5.6/en/create-event.html

mysql event事件調度器的圖文程式碼詳解
#檢視已建立好的event,進入目前db後,show create event xxx\G

mysql event事件調度器的圖文程式碼詳解

#event的資訊查詢和意義

mysql event事件調度器的圖文程式碼詳解#查看某個event的狀態信息,可查看mysql.event或information_schema.events,或簡單地切到目前DB後執行show events; 三者的內容基本上一致,information_schema無法做了下資料複製,更改了下列名稱和starts時間以便更好的閱讀。已information_schema.events裡的訊息為例解釋


EVENT_CATALOG:

一般都是def,不管

mysql event事件調度器的圖文程式碼詳解
EVENT_SCHEMA:

#event所在的schemaEVENT_NAME:

event的名稱DEFINER:

event的定義者,和定義這個event時,預設selectcurrent_user()的結果一致,如果該user有super權限,可以指定為其他使用者

TIME_ZONE:event使用的時區,預設是system,建議別做修改EVENT_BODY:

通常都是SQL,不用管EVENT_DEFINITION:

該event的內容,可以是具體的insert等SQL,也可以是一個調用預存程序的操作

EVENT_TYPE:這個參數比較重要,定義的時候指定,有兩個值:RECURRING和ONE TIME, RECURRING表示只要符合條件就會重複執行,而ONE TIME只會呼叫一次EXECUTE_AT:

針對one-time類型的event有效,如果是RECURRING類型的event一般為NULL,表示該event的預計執行時間

INTERVAL_VALUE:針對RECURRING類型的event有效,表示執行間隔長度INTERVAL_FIELD:

針對RECURRING類型的event有效,表示執行間隔的單位,一般是SECOND,DAY等值,可參考建立語法SQL_MODE:

目前event所採用的SQL_MODE#STARTS:

針對RECURRING類型的event有效,表示一個event從哪個時間點點開始執行,和one-time的EXECUTE_AT功能類似。為NULL表示一符合條件就開始執行

ENDS:針對RECURRING類型的event有效,表示一個event到了哪個時間點後不再執行,如果為NULL就是永不停止

STATUS:一般有三個值,ENABLED, DISABLED和SLAVESIDE_DISABLED,其中ENABLED表示啟動這個event,該event只要符合其他條件就會執行;DISABLED狀態改event將不會執行, SLAVESIDE_DISABLED表示在從庫上不執行該event。需要特別注意在從庫上不要執行任何形式的event,因為如果主庫執行一次,複製到從庫後,從庫再執行一次的話,那就數據不一致了,一般來說直接禁用掉從庫上的總開關event_scheduler就行。

ON_COMPLETION:只有兩個值,PRESERVE和NOT PRESERVE,PRESERVE

CREATED:event的建立時間

LAST_ALTERED:event最新一次被修改的時間

LAST_EXECUTED:event最近一次執行的時間,如果為NULL表示從未執行過

EVENT_COMMENT:event的註釋訊息

##ORIGINATOR:目前event建立時的server-id,用於主從上的處理,例如SLAVESIDE_DISABLED

CHARACTER_SET_CLIENT:event建立時的客戶端

字元集,即character_set_client

#COLLATION_CONNECTION:event建立時的連接字元校驗規則,即collat​​ion_connection

DATABASE_COLLATION:event建立時的資料庫字元集校驗規則

##EVENT的權限管理1 設定event_scheduler

系統變數

,需要super_priv權限2 創建,修改和刪除event需要該user用戶EVENT權限,該權限是schema層級的

3 對應event的具體內容,需要對應的權限。例如event裡面有某張表的

insert操作

,那麼該user需要對該表的insert操作,不然LAST_EXECUTED一直會是NULL

EVENT的狀態查詢透過以下指令查看DB啟動以來的event的相關資訊統計

mysql> showglobal status like '%event%';
+--------------------------+-------+
|Variable_name | Value |
+--------------------------+-------+
|Com_alter_event | 0 |
|Com_create_event | 2 |
|Com_drop_event | 2 |
|Com_show_binlog_events | 0 |
|Com_show_create_event | 191 |
|Com_show_events | 40 |
|Com_show_relaylog_events | 0 |
+--------------------------+-------+
7 rows in set(0.00 sec)

使用建議 1 如果主庫已經執行過,從庫上務必要保證event不會執行(除非故意在slave上創建的event)

2 創建,刪除等操作嚴禁直接操作mysql.event表,而是透過create等正規語法實現,不然會導致元資料混亂,各種莫名其妙的問題隨之產生,例如event不執行或重複執行。這時一般只有重啟DB才能解決 了。

3 建立的event涉及到大量資料變更的話,要做好充分測試,確保不影響現網服務

4 如果需要備份帶有event的DB,mysqldump時需要加上--event參數

以上是mysql event事件調度器的圖文程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn