文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  事件排程器設定

27.5.2 事件排程器設定

事件是由特殊的事件排程器執行緒執行;當我們提到事件排程器時,實際上指的是這個執行緒。執行時,擁有 PROCESS 權限的使用者可以在 SHOW PROCESSLIST 的輸出中看到事件排程器執行緒及其目前狀態,如下面的討論所示。

全域 event_scheduler 系統變數決定是否在伺服器上啟用並執行事件排程器。它具有以下值之一,這些值會如下所述影響事件排程

  • ON:事件排程器已啟動;事件排程器執行緒執行並執行所有排定的事件。ON 是預設的 event_scheduler 值。

    當事件排程器為 ON 時,事件排程器執行緒會在 SHOW PROCESSLIST 的輸出中列為守護程序,其狀態會如下所示

    mysql> SHOW PROCESSLIST\G
    *************************** 1. row ***************************
         Id: 1
       User: root
       Host: localhost
         db: NULL
    Command: Query
       Time: 0
      State: NULL
       Info: show processlist
    *************************** 2. row ***************************
         Id: 2
       User: event_scheduler
       Host: localhost
         db: NULL
    Command: Daemon
       Time: 3
      State: Waiting for next activation
       Info: NULL
    2 rows in set (0.00 sec)

    可以將 event_scheduler 的值設定為 OFF 來停止事件排程。

  • OFF:事件排程器已停止。事件排程器執行緒不會執行,不會顯示在 SHOW PROCESSLIST 的輸出中,而且不會執行任何排定的事件。

    當事件排程器停止時(event_schedulerOFF),可以將 event_scheduler 的值設定為 ON 來啟動它。(請參閱下一項。)

  • DISABLED:此值會使事件排程器無法運作。當事件排程器為 DISABLED 時,事件排程器執行緒不會執行(因此不會出現在 SHOW PROCESSLIST 的輸出中)。此外,無法在執行時變更事件排程器的狀態。

如果事件排程器狀態尚未設定為 DISABLED,則可以在 ONOFF 之間切換 event_scheduler(使用 SET)。也可以在設定此變數時使用 0 表示 OFF,而使用 1 表示 ON。因此,可以在 mysql 用戶端中使用以下 4 個陳述式中的任何一個來開啟事件排程器

SET GLOBAL event_scheduler = ON;
SET @@GLOBAL.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@GLOBAL.event_scheduler = 1;

同樣地,可以使用以下 4 個陳述式中的任何一個來關閉事件排程器

SET GLOBAL event_scheduler = OFF;
SET @@GLOBAL.event_scheduler = OFF;
SET GLOBAL event_scheduler = 0;
SET @@GLOBAL.event_scheduler = 0;
注意

如果啟用事件排程器,則啟用 super_read_only 系統變數會防止它在 events 資料字典資料表中更新事件「最後執行」時間戳記。這會導致事件排程器在下次嘗試執行排定事件時停止,並在伺服器錯誤記錄檔中寫入訊息。(在這種情況下,event_scheduler 系統變數不會從 ON 變更為 OFF。一個含意是,此變數會拒絕 DBA 意圖 啟用或停用事件排程器,而其啟動或停止的實際狀態可能不同。)。如果在啟用 super_read_only 之後隨即停用,則伺服器會根據需要自動重新啟動事件排程器。

儘管 ONOFF 具有數字等效值,但 event_scheduler 透過 SELECTSHOW VARIABLES 顯示的值始終是 OFFONDISABLEDDISABLED 沒有數字等效值。因此,設定此變數時,通常會優先選擇 ONOFF 而不是 10

請注意,如果未將 event_scheduler 指定為全域變數,嘗試設定它會造成錯誤

mysql< SET @@event_scheduler = OFF;
ERROR 1229 (HY000): Variable 'event_scheduler' is a GLOBAL
variable and should be set with SET GLOBAL
重要

只能在伺服器啟動時將事件排程器設定為 DISABLED。如果 event_schedulerONOFF,則無法在執行時將其設定為 DISABLED。此外,如果在啟動時將事件排程器設定為 DISABLED,則無法在執行時變更 event_scheduler 的值。

若要停用事件排程器,請使用以下兩種方法之一

  • 在啟動伺服器時作為命令列選項

    --event-scheduler=DISABLED
  • 在伺服器組態檔中(Windows 系統上的 my.cnfmy.ini),包含伺服器可以讀取的行(例如,在 [mysqld] 區段中)

    event_scheduler=DISABLED

若要啟用事件排程器,請重新啟動伺服器,且不使用 --event-scheduler=DISABLED 命令列選項,或在伺服器組態檔中移除或註解包含 event-scheduler=DISABLED 的行(視情況而定)。或者,您可以在啟動伺服器時使用 ON(或 1)或 OFF(或 0)來代替 DISABLED 值。

注意

event_scheduler 設定為 DISABLED 時,您可以發出事件操作陳述式。在這種情況下,不會產生警告或錯誤(前提是陳述式本身有效)。但是,在將此變數設定為 ON(或 1)之前,無法執行排定的事件。完成此操作後,事件排程器執行緒會執行所有符合排程條件的事件。

使用 --skip-grant-tables 選項啟動 MySQL 伺服器會導致 event_scheduler 設定為 DISABLED,並覆寫在命令列或 my.cnfmy.ini 檔案中設定的任何其他值(錯誤 #26807)。

如需用於建立、變更和刪除事件的 SQL 陳述式,請參閱第 27.5.3 節「事件語法」

MySQL 在 INFORMATION_SCHEMA 資料庫中提供一個 EVENTS 資料表。可以查詢此資料表以取得伺服器上已定義的排程事件的相關資訊。請參閱第 27.5.4 節,「事件元數據」第 28.3.14 節,「INFORMATION_SCHEMA EVENTS 資料表」以取得更多資訊。

有關事件排程和 MySQL 權限系統的資訊,請參閱第 27.5.6 節,「事件排程器和 MySQL 權限」