事件计划程序配置
事件由特殊的事件调度程序线程执行;当我们引用事件调度程序时,实际上是指该线程。运行时,事件调度程序线程及其当前状态可以由具有PROCESS
输出特权的用户看到SHOW PROCESSLIST
,如下面的讨论所示。
全局event_scheduler
系统变量确定事件调度程序是否已启用并在服务器上运行。它具有这3个值之一,这会影响此处所述的事件调度。默认值为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_scheduler
是OFF
),它可以通过设置的值开始event_scheduler
到ON
。(请参阅下一项。)DISABLED
:此值使事件计划程序无法运行。当Event Scheduler为时DISABLED
,事件调度程序线程不会运行(因此不会出现在的输出中SHOW PROCESSLIST
)。此外,事件调度程序状态不能在运行时更改。
如果事件计划程序的状态尚未设置为DISABLED
,event_scheduler
则可以在ON
和之间切换OFF
(使用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;
虽然ON
与OFF
具有数字等同物,显示该值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
在运行时将其设置为。另外,如果将事件计划程序设置为DISABLED
启动时,则无法event_scheduler
在运行时更改其值。
若要禁用事件计划程序,请使用以下两种方法之一:
作为启动服务器时的命令行选项:
--event-scheduler=DISABLED
在服务器配置文件(
my.cnf
或my.ini
在Windows系统上)中,包括服务器将在其上读取的行(例如,在[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.cnf
or my.ini
文件中设置的任何其他值(错误#26807)。
有关用于创建,更改和删除事件的SQL语句,请参见“事件语法”。
MySQL EVENTS
在INFORMATION_SCHEMA
数据库中提供了一个表。可以查询该表以获得有关服务器上已定义的计划事件的信息。有关更多信息,请参见“事件元数据”和“ INFORMATION_SCHEMA事件表”。
有关事件调度和MySQL特权系统的信息,请参见“事件调度程序和MySQL特权”。