Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Event Scheduler Configuration

27.4.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 的输出中显示)。此外,事件调度器状态不能在运行时更改。

如果事件调度器状态没有被设置为 DISABLEDevent_scheduler 可以在 ONOFF 之间切换(使用 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;
Note

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

尽管 ONOFF 有数字等效值,但 event_schedulerSELECTSHOW VARIABLES 显示的值始终是 OFFONDISABLEDDISABLED 没有数字等效值。因此,在设置这个变量时,通常优先使用 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

只能在服务器启动时将 Event Scheduler 设置为 DISABLED。如果 event_schedulerONOFF,则无法在运行时将其设置为 DISABLED。此外,如果 Event Scheduler 在启动时设置为 DISABLED,则无法在运行时更改 event_scheduler 的值。

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

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

    --event-scheduler=DISABLED
  • 在服务器配置文件 (my.cnf,或 Windows 系统上的 my.ini) 中包括一行,可以被服务器读取(例如,在 [mysqld] 部分中):

    event_scheduler=DISABLED

要启用事件计划程序,重新启动服务器,而不使用 --event-scheduler=DISABLED 命令行选项,或者删除或注释掉服务器配置文件中的 event-scheduler=DISABLED 行,适当地。或者,您可以使用 ON(或 1)或 OFF(或 0)代替 DISABLED 值启动服务器。

Note

您可以在 event_scheduler 设置为 DISABLED 时发出事件操作语句。在这种情况下,不会生成警告或错误(假设语句本身是有效的)。然而,计划事件无法执行,直到该变量被设置为 ON(或 1)。一旦这样做了,事件计划程序线程将执行所有满足调度条件的事件。

使用 --skip-grant-tables 选项启动 MySQL 服务器将导致 event_scheduler 被设置为 DISABLED,覆盖命令行或 my.cnfmy.ini 文件中的任何其他值(Bug #26807)。

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

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

有关事件计划和 MySQL 权限系统的信息,请参阅 第 27.4.6 节,“事件计划程序和 MySQL 权限”