文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  事件调度程序配置

27.5.2 事件调度程序配置

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

全局的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 来停止事件调度。

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

    当事件调度程序停止时(event_schedulerOFF),可以通过将event_scheduler 的值设置为ON 来启动它。(参见下一项。)

  • DISABLED:此值使事件调度程序无法运行。当事件调度程序为DISABLED 时,事件调度程序线程不会运行(因此不会出现在SHOW PROCESSLIST 的输出中)。此外,事件调度程序状态不能在运行时更改。

如果事件调度程序状态尚未设置为DISABLED,则可以将event_schedulerONOFF 之间切换(使用SET)。在设置此变量时,也可以使用0 表示OFF,使用1 表示ON。因此,以下 4 个语句中的任何一个都可以在mysql 客户端中使用来打开事件调度程序

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;
注意

如果事件调度程序已启用,则启用super_read_only 系统变量会阻止它更新事件最后执行 时间戳在events 数据字典表中。这会导致事件调度程序在下次尝试执行计划的事件时停止,并在服务器错误日志中写入一条消息。(在这种情况下,event_scheduler 系统变量不会从ON 更改为OFF。这意味着该变量会拒绝 DBA 意图 启用或禁用事件调度程序,而其实际启动或停止状态可能会有所不同。)如果在启用super_read_only 之后将其禁用,服务器会自动重新启动事件调度程序,具体取决于需要。

尽管ONOFF 有数值等效项,但event_schedulerSELECTSHOW 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
重要

只有在服务器启动时才能将事件调度程序设置为DISABLED。如果event_schedulerONOFF,则不能在运行时将其设置为DISABLED。同样,如果在启动时将事件调度程序设置为DISABLED,则不能在运行时更改event_scheduler 的值。

要禁用事件调度程序,请使用以下两种方法之一

  • 在启动服务器时作为命令行选项

    --event-scheduler=DISABLED
  • 在服务器配置文件(在 Windows 系统上为my.cnfmy.ini)中,包含服务器可以读取的该行(例如,在[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.cnfmy.ini 文件中设置的任何其他值(错误 #26807)。

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

MySQL 在INFORMATION_SCHEMA 数据库中提供了一个EVENTS 表。可以查询此表以获取有关在服务器上定义的计划事件的信息。有关更多信息,请参见第 27.5.4 节“事件元数据”第 28.3.14 节“INFORMATION_SCHEMA EVENTS 表”

有关事件调度和 MySQL 权限系统的详细信息,请参阅 第 27.5.6 节“事件调度程序和 MySQL 权限”