事件由一个特殊的事件调度程序线程执行;当我们提到 Event Scheduler 时,实际上是指这个线程。运行时,事件调度程序线程及其当前状态可由PROCESS
在 的输出中具有特权的用户看到SHOW PROCESSLIST
,如以下讨论所示。
全局event_scheduler
系统变量确定事件调度程序是否在服务器上启用和运行。它具有以下值之一,这些值会影响所描述的事件调度:
OFF
:事件调度程序已停止。事件调度程序线程未运行,未显示在 的输出中SHOW PROCESSLIST
,并且没有计划的事件执行。OFF
是默认event_scheduler
值。当 Event Scheduler 停止(
event_scheduler
isOFF
)时,可以通过设置 to 的值来启动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
。DISABLED
:此值使事件计划程序无法运行。当 Event Scheduler 为DISABLED
时,事件调度程序线程不会运行(因此不会出现在 的输出中SHOW PROCESSLIST
)。此外,Event Scheduler 状态不能在运行时更改。
如果 Event Scheduler 状态尚未设置为
DISABLED
,
则可以在和event_scheduler
之间切换(使用
)。设置此变量时也可以使用for
和for
。因此,可以在mysql
客户端中使用以下4条语句中的任意一条来开启Event Scheduler:
ON
OFF
SET
0
OFF
1
ON
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
具有等效的数字,但
or显示event_scheduler
的
值始终是、
或之一。
没有数字等价物。出于这个原因,通常
优先于
设置此变量。
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
可以将事件调度程序设置为
DISABLED
仅在服务器启动时。如果
event_scheduler
是
ON
或OFF
,则不能DISABLED
在运行时将其设置为。此外,如果 Event Scheduler 设置为DISABLED
at startup,则无法更改
event_scheduler
at runtime 的值。
要禁用事件调度程序,请使用以下两种方法之一:
作为启动服务器时的命令行选项:
--event-scheduler=DISABLED
在服务器配置文件(
my.cnf
,或my.ini
在 Windows 系统上)中,包括服务器可以读取的行(例如,在一个[mysqld]
部分中):event_scheduler=DISABLED
要启用事件计划程序,请在不使用
--event-scheduler=DISABLED
命令行选项的情况下重新启动服务器,或者在删除或注释掉event-scheduler=DISABLED
服务器配置文件中包含的行后(视情况而定)。或者,您可以在启动服务器时
使用ON
(or 1
) 或
OFF
(or 0
) 代替
值。DISABLED
event_scheduler
当设置为
时,您可以发出事件操作语句
DISABLED
。在这种情况下不会生成警告或错误(前提是语句本身有效)。ON
但是,在将此变量设置为(或
1
)之前,计划的事件无法执行。完成此操作后,事件调度程序线程将执行所有满足调度条件的事件。
--skip-grant-tables
使用选项
启动 MySQL 服务器
导致event_scheduler
设置为
,覆盖在命令行或or
文件DISABLED
中设置的任何其他值(错误 #26807)。
my.cnf
my.ini
对于用于创建、更改和删除事件的 SQL 语句,请参阅 第 23.4.3 节,“事件语法”。
MySQLEVENTS
在数据库中提供了一个表
INFORMATION_SCHEMA
。可以查询此表以获取有关已在服务器上定义的计划事件的信息。有关更多信息,请参阅第 23.4.4 节,“事件元数据”和第 24.3.8 节,“INFORMATION_SCHEMA 事件表”。
有关事件调度和 MySQL 特权系统的信息,请参阅第 23.4.6 节,“事件调度程序和 MySQL 特权”。