23.4.2 事件计划程序配置
事件由特殊的事件调度程序线程执行;当我们引用事件调度程序时,我们实际上是在引用该线程。运行时,事件调度程序线程及其当前状态可以由在SHOW PROCESSLIST的输出中具有PROCESS特权的用户看到,如下面的讨论所示。
全局event_scheduler系统变量确定事件调度程序是否已启用并在服务器上运行。它具有以下三个值之一,这会影响事件调度,如下所述:
OFF
:事件调度程序已停止。事件调度程序线程未运行,未在SHOW PROCESSLIST的输出中显示,并且不执行任何调度的事件。OFF
是event_scheduler的默认值。
当事件调度程序停止(event_scheduler是OFF
)时,可以通过将event_scheduler的值设置为ON
来启动它。 (请参阅下一项.)
ON
:事件调度程序已启动;事件调度程序线程运行并执行所有调度的事件。
当事件调度程序为ON
时,事件调度程序线程在SHOW PROCESSLIST的输出中作为守护进程列出,其状态 table 示如下:
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
来停止事件调度。
DISABLED
:此值使事件计划程序无法运行。当事件计划程序为DISABLED
时,事件计划程序线程不会运行(因此不会出现在SHOW PROCESSLIST的输出中)。此外,事件调度程序状态不能在运行时更改。
如果事件计划程序状态尚未设置为DISABLED
,则可以在ON
和OFF
之间切换event_scheduler(使用SET)。设置此变量时,也可以将0
table 示OFF
,将1
table 示ON
。因此,可以在mysqlClient 端中使用以下 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;
尽管ON
和OFF
具有数值等效项,但为event_scheduler by SELECT或SHOW VARIABLES显示的值始终是OFF
,ON
或DISABLED
之一。 * DISABLED
没有等效的数值*。因此,设置此变量时,通常首选ON
和OFF
而不是1
和0
。
请注意,尝试设置event_scheduler而不将其指定为全局变量会导致错误:
mysql< SET @@event_scheduler = OFF;
ERROR 1229 (HY000): Variable 'event_scheduler' is a GLOBAL
variable and should be set with SET GLOBAL
Important
仅在服务器启动时才可以将事件调度程序设置为DISABLED
。如果event_scheduler是ON
或OFF
,则无法在运行时将其设置为DISABLED
。另外,如果在启动时将事件计划程序设置为DISABLED
,则无法在运行时更改event_scheduler的值。
若要禁用事件计划程序,请使用以下两种方法之一:
- 作为启动服务器时的命令行选项:
--event-scheduler=DISABLED
- 在服务器配置文件中(在 Windows 系统上是
my.cnf
或my.ini
),包括服务器将在其中读取文件的行(例如,在[mysqld]
部分中):
event_scheduler=DISABLED
要启用事件计划程序,请在不使用--event-scheduler=DISABLED命令行选项的情况下,或者在适当时删除或 Comments 掉服务器配置文件中包含event-scheduler=DISABLED的行后,重新启动服务器。或者,您可以在启动服务器时使用ON
(或1
)或OFF
(或0
)代替DISABLED
值。
Note
当event_scheduler设置为DISABLED
时,您可以发出事件处理语句。在这种情况下,不会生成任何警告或错误(前提是该语句本身有效)。但是,在此变量设置为ON
(或1
)之前,sched 事件无法执行。完成此操作后,事件调度程序线程将执行其调度条件得到满足的所有事件。
使用--skip-grant-tables选项启动 MySQL 服务器会导致event_scheduler设置为DISABLED
,从而覆盖命令行上或my.cnf
或my.ini
文件中设置的其他任何值(错误#26807)。
有关用于创建,更改和删除事件的 SQL 语句,请参见第 23.4.3 节“事件语法”。
MySQL 在INFORMATION_SCHEMA
数据库中提供了EVENTStable。可以查询该 table 以获得有关服务器上已定义的计划事件的信息。有关更多信息,请参见第 23.4.4 节“事件元数据”和第 24.8 节““ INFORMATION_SCHEMA 事件”table”。
有关事件调度和 MySQL 特权系统的信息,请参见第 23.4.6 节“事件调度程序和 MySQL 特权”。