相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  事件排程器配置

27.4.2 事件排程器配置

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

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

  • ON:事件排程器已啟動;事件排程器執行緒會執行,並執行所有排定的事件。ONevent_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,則可以使用 SETONOFF 之間切換 event_scheduler。也可以在設定此變數時使用 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_schedulerSELECTSHOW 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.4.3 節「事件語法」

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

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