56

我通过 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

我的环境是mac + MAMP Pro。我希望在一分钟内更改我的“测试”表中名称为“z”的所有行。但事实并非如此。

我是否需要额外的东西才能让我的活动开始工作?

“SHOW PROCESSLIST”的输出: 在此处输入图像描述

谢谢。

4

9 回答 9

136

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

 SET GLOBAL event_scheduler = ON;

运行它。

于 2013-05-27T07:29:48.000 回答
13

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

#Event scheduler can be set to 1 (On), 0 (Off), or Disabled
event_scheduler=1

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

SET GLOBAL event_scheduler = ON;

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

请注意,如果 event_scheduler 设置为禁用,这将不起作用。在这种情况下,唯一的选择是重新启动服务。

于 2016-10-17T14:47:38.497 回答
12

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

SHOW PROCESSLIST;

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

Id           User         Host      db  Command Time    State            Info
22870   event_scheduler localhost   \N   Daemon  23    Waiting for next activation  \N

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

SELECT @@global.event_scheduler;

结果应该是ON,否则将其设置为关闭(将获取0命令),如下一节所述。


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

 SET GLOBAL event_scheduler = ON;

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

于 2017-07-06T10:18:34.570 回答
11

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

[mysqld]

# turning on event_scheduler  
event_scheduler=ON

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

sudo service mysql restart

然后检查您的进程列表

SHOW PROCESSLIST

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

SELECT * FROM INFORMATION_SCHEMA.events
于 2018-03-09T21:39:16.227 回答
7

SET GLOBAL event_scheduler = ON;

如果 event_scheduler 显式DISABLED将不起作用,请参见下面的方法

永久(需要重新启动)

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

[mysqld]
event_scheduler = ON

笔记:

event_scheduler变量可以具有以下可能的状态:

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

警告:关键字ON / OFF优于其数值等效项。事实上,Mysql Workbench无法识别配置,它在Options File部分 event_scheduler=1显示为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

于 2019-08-26T17:06:25.343 回答
0

我只想添加到这个线程。我将我的数据库转储到另一台服务器,因此我的事件的定义者没有为用户定义这样的授权。我更新了我的定义器

ALTER DEFINER='root'@'localhost' EVENT event.name COMMENT '';

确保您的定义者具有正确的权限。

于 2017-04-21T22:46:13.623 回答
0

我刚刚发现在 MariaDB 上,添加事件后(在我的情况下,它是第一个事件),您必须重新启动事件调度程序

 SET GLOBAL event_scheduler = OFF;

接着

 SET GLOBAL event_scheduler = ON;

使其实际上使调度程序进入“等待激活”状态。

于 2018-02-02T17:18:00.033 回答
0

记得在“ DO BEGIN ”或“ DO ”之后添加“ Commit ”。之后为我工作。

于 2017-09-20T02:32:35.037 回答
-1

尝试

SET GLOBAL event_scheduler = ON;
DELIMITER $$
CREATE DEFINER=`root`@`db01` EVENT `PRICEALERT_STATUS` 
ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CURRENT_DATE) 
DO BEGIN
// Your Query
END $$
DELIMITER ;
于 2014-09-24T11:57:50.033 回答