簡單來說,事件(event)是可以根據排程執行的任何工作。許多受歡迎的DBMS 都支援事件。這些也稱為「排定的事件」或「時態觸發器」,因為事件是由時間觸發的,而不是由資料庫操作(例如資料表更新)調用的觸發器。資料庫事件可用於各種工作,例如將資料庫資料表最佳化、清理記錄、封存資料或在非尖峰時間產生報告。
在本篇文章中,我們將學習如何檢視和啟用資料庫事件。在隨後的文章中,我們將學習如何為各種工作配置事件。
事件與排程工作比較
雖然資料庫事件類似於 UNIX 中的 cron 工作或 Windows 工作排程器,但它們的不同之處在於,事件在資料庫層級進行管理和調用,而不是作業系統(OS)。因此,資料庫事件是使用資料庫的資料定義語言(DDL)配置,而 cron 工作和排程工作是使用該作業系統的特定命令和/或工具定義。
配置 Event Scheduler(事件排程器)執行緒
事件由一個特殊執行緒執行。如果你具有 PROCESS 權限,則可以在 mysql> 命令提示字元下輸入「SHOW PROCESSLIST」命令來查看事件排程器執行緒及其目前的狀態:
mysql> SHOW PROCESSLIST; +----+-----------------+-----------------+--------+---------+------+-----------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------------+-----------------+--------+---------+------+-----------------------------+------------------+ | 2 | event_scheduler | localhost:49670 | NULL | Daemon | 3 | Waiting for next activation | | | 3 | root | localhost:49671 | NULL | Sleep | 43 | | NULL | | 4 | root | localhost:49672 | NULL | Sleep | 180 | | NULL | | 5 | root | localhost:56134 | sakila | Query | 0 | starting | SHOW PROCESSLIST | | 6 | root | localhost:56136 | sakila | Sleep | 1025 | | NULL | +----+-----------------+-----------------+--------+---------+------+-----------------------------+------------------+ 5 rows in set (0.01 sec)
啟用事件排程器
事件排程器的啟動和啟用都是透過全域 event_scheduler 系統變數完成的。你可以為其指派以下三個值的其中一個:
- ON:這啟動了事件排程器。事件排程器排程器執行所有排定的事件。這是預設值。
當事件排程器為 ON 時,事件排程器執行緒在 SHOW PROCESSLIST 的輸出中列為常駐程式處理程序,其狀態表示為「Waiting for next activation」(等待下一次激活),如上面的輸出所示。
「ON」或其相等數字 1 都是可接受的值。因此,你可以在 mysql 用戶端中使用以下 4 個語句中的任何一個來開啟事件排程器:
- SET GLOBAL event_scheduler = ON;
- SET @@global.event_scheduler = ON;
- SET GLOBAL event_scheduler = 1;
- SET @@global.event_scheduler = 1;
- OFF:停止事件排程器。事件排程器執行緒沒有執行,沒有顯示在 SHOW PROCESSLIST 的輸出中,並且不執行任何排定的事件。
當 event_scheduler 變數設定為 OFF(事件排程器停止)時,可以將 event_scheduler 的值設定為 ON 來(重新)啟動它。
你也可以使用 0 代替「OFF」,這 4 個語句中的任何一個都可用於關閉事件排程器:
- SET GLOBAL event_scheduler = OFF;
- SET @@global.event_scheduler = OFF;
- SET GLOBAL event_scheduler = 0;
- SET @@global.event_scheduler = 0;
- DISABLED:此值將事件排程器執行緒置於休眠狀態,事件排程器無法作業。此外,當以事件排程器為 DISABLED 時,事件排程器執行緒不會出現在 SHOW PROCESSLIST 的輸出中。
請注意,事件排程器已停用時,無法在執行階段變更其狀態。
顯示 event_scheduler 值
雖然 ON 和 OFF 具有相等數字,但 DISABLED 沒有。因此,SELECT 或 SHOW VARIABLES 產生的 event_scheduler 值始終使用完整文字顯示,即「OFF」、「ON」或「DISABLED」。因此,在設定 event_scheduler 變數時,建議優先使用「ON」和「OFF」而不是 1 和 0。
mysql> SHOW VARIABLES like 'event_%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | OFF | +-----------------+-------+ 1 row in set (0.02 sec)