Mysql事件不起作用

Ran*_*ana 43 mysql mysql-event mysql-routines

我通过phpmyadmin在我的mysql数据库中添加了以下简单的测试事件:

CREATE DEFINER=`root`@`localhost` EVENT `my_event` 
ON SCHEDULE EVERY 1 MINUTE STARTS '2013-05-27 00:00:00' 
ON COMPLETION NOT PRESERVE ENABLE DO 
BEGIN
    UPDATE `test` SET `name`="z";
END
Run Code Online (Sandbox Code Playgroud)

我的环境是mac + MAMP Pro.我希望在一分钟内更改名为'z'的'test'表中的所有行.但事情并非如此.

我需要额外的东西来让我的活动开始工作吗?

输出"SHOW PROCESSLIST": 在此输入图像描述

谢谢.

Jac*_*far 112

事件由调度程序运行,默认情况下不会启动.使用SHOW PROCESSLIST可以检查它是否已启动.如果没有,请运行该命令

 SET GLOBAL event_scheduler = ON;
Run Code Online (Sandbox Code Playgroud)

运行它.

  • 注意:"SHOW PROCESSLIST"可能不会显示正在运行的进程,即使它实际上正在运行 - 这发生在我没有root权限的帐户中基于Plesk的Web托管中.event_scheduler正在运行,但它不会出现在列表中.对我来说,最好使用`select @@ event_scheduler`; 如果是的话,它将返回"ON". (4认同)

tec*_*ude 8

对于那些想知道如何在启动时默认启用它的人,将以下内容添加到配置文件(my.ini,my.cnf):

#Event scheduler can be set to 1 (On), 0 (Off), or Disabled
event_scheduler=1
Run Code Online (Sandbox Code Playgroud)

在这种情况下需要重新启动服务,因此如果您想要最小的中断,请将其添加到配置文件,然后运行SQL:

SET GLOBAL event_scheduler = ON;
Run Code Online (Sandbox Code Playgroud)

这样,它将运行当前进程,如果服务器重新启动,它仍然可以工作.

请注意,如果event_scheduler设置为disabled,则此方法无效.在这种情况下,唯一的选择是重新启动服务.


Nab*_*med 6

验证event_scheduler是否打开-执行以下命令:

SHOW PROCESSLIST;
Run Code Online (Sandbox Code Playgroud)

它将输出一个表/条目,您必须使用User event_schedulerCommand 查找条目Daemon

Id           User         Host      db  Command Time    State            Info
22870   event_scheduler localhost   \N   Daemon  23    Waiting for next activation  \N
Run Code Online (Sandbox Code Playgroud)

或者,您也可以使用以下命令进行验证:

SELECT @@global.event_scheduler;
Run Code Online (Sandbox Code Playgroud)

结果应为ON,否则将其关闭(将0在命令中得到),如下一节所述。


如果没有任何此类条目(如上所述),则可以使用以下命令启动事件调度程序:

 SET GLOBAL event_scheduler = ON;
Run Code Online (Sandbox Code Playgroud)

完成后,您可以SHOW PROCESSLIST如上所述使用命令验证它是否已正确执行。


ton*_*gil 5

如果您希望event_scheduler每次mysql服务器重新启动时自动启动,则应在其中找到[mysqld]my.inimy.cnf文件部分下的任何/etc/mysql位置

[mysqld]

# turning on event_scheduler  
event_scheduler=ON
Run Code Online (Sandbox Code Playgroud)

重新启动mysql以检查它是否正在运行(在命令行终端中!)

sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)

然后检查您的过程清单

SHOW PROCESSLIST
Run Code Online (Sandbox Code Playgroud)

您可以通过检查事件的最后运行时间来检查事件是否正在运行

SELECT * FROM INFORMATION_SCHEMA.events
Run Code Online (Sandbox Code Playgroud)


Mad*_*col 5

SET GLOBAL event_scheduler = ON;
Run Code Online (Sandbox Code Playgroud)

如果 event_scheduler 被明确禁用将不起作用,请参阅下面的方法

永久(需要重启)

在您的配置文件中(在 Ubuntu 中是/etc/mysql/mysql.cnf):

[mysqld]
event_scheduler = ON
Run Code Online (Sandbox Code Playgroud)

笔记:

event_scheduler变量可以有这个可能的状态:

  • (或0)(默认)
  • (或1
  • 禁用:您不能使用临时启用,您只能通过配置文件更改状态并重新启动服务器

警告:关键字ON / OFF优先于它们的数字等效项。事实上,Mysql Workbench无法识别配置event_scheduler=1,它在Options File部分显示为OFF在 Ubuntu 中使用 Mysql Workbench 8.0.17 和 Mysql Server 5.7.27 进行测试

尽管ONOFF具有数字等效项,但 SELECT 或 SHOW VARIABLES 为 event_scheduler 显示的值始终是OFFONDISABLED 之一DISABLED没有数字等效项。因此,在设置此变量时,ONOFF通常优先于10

来源:https : //dev.mysql.com/doc/refman/5.7/en/events-configuration.html