23.4.2 事件计划程序配置

事件由特殊的事件调度程序线程执行;当我们引用事件调度程序时,我们实际上是在引用该线程。运行时,事件调度程序线程及其当前状态可以由在SHOW PROCESSLIST的输出中具有PROCESS特权的用户看到,如下面的讨论所示。

全局event_scheduler系统变量确定事件调度程序是否已启用并在服务器上运行。它具有以下三个值之一,这会影响事件调度,如下所述:

  • OFF:事件调度程序已停止。事件调度程序线程未运行,未在SHOW PROCESSLIST的输出中显示,并且不执行任何调度的事件。 OFFevent_scheduler的默认值。

当事件调度程序停止(event_schedulerOFF)时,可以通过将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,则可以在ONOFF之间切换event_scheduler(使用SET)。设置此变量时,也可以将0table 示OFF,将1table 示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;

尽管ONOFF具有数值等效项,但为event_scheduler by SELECTSHOW VARIABLES显示的值始终是OFFONDISABLED之一。 * DISABLED没有等效的数值*。因此,设置此变量时,通常首选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

Important

仅在服务器启动时才可以将事件调度程序设置为DISABLED。如果event_schedulerONOFF,则无法在运行时将其设置为DISABLED。另外,如果在启动时将事件计划程序设置为DISABLED,则无法在运行时更改event_scheduler的值。

若要禁用事件计划程序,请使用以下两种方法之一:

  • 作为启动服务器时的命令行选项:
--event-scheduler=DISABLED
  • 在服务器配置文件中(在 Windows 系统上是my.cnfmy.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.cnfmy.ini文件中设置的其他任何值(错误#26807)。

有关用于创建,更改和删除事件的 SQL 语句,请参见第 23.4.3 节“事件语法”

MySQL 在INFORMATION_SCHEMA数据库中提供了EVENTStable。可以查询该 table 以获得有关服务器上已定义的计划事件的信息。有关更多信息,请参见第 23.4.4 节“事件元数据”第 24.8 节““ INFORMATION_SCHEMA 事件”table”

有关事件调度和 MySQL 特权系统的信息,请参见第 23.4.6 节“事件调度程序和 MySQL 特权”