• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 事件计划程序配置

    事件由特殊的事件调度程序线程执行;当我们引用事件调度程序时,实际上是指该线程。运行时,事件调度程序线程及其当前状态可以由具有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_schedulerOFF

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

      当事件调度停止(event_schedulerOFF),它可以通过设置的值开始event_schedulerON。(请参阅下一项。)

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

    如果事件计划程序的状态尚未设置为DISABLEDevent_scheduler则可以在ON和之间切换OFF(使用SET)。也可以使用0OFF,而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;
    

    虽然ONOFF具有数字等同物,显示该值event_scheduler通过SELECTSHOW VARIABLES总是之一OFFONDISABLEDDISABLED没有等效的数值。出于这个原因,ON并且OFF通常是优选的超过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
      
    • 在服务器配置文件(my.cnfmy.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.cnfor my.ini文件中设置的任何其他值(错误#26807)。

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

    MySQL EVENTSINFORMATION_SCHEMA数据库中提供了一个表。可以查询该表以获得有关服务器上已定义的计划事件的信息。有关更多信息,请参见“事件元数据”和“ INFORMATION_SCHEMA事件表”。

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