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)
运行它.
对于那些想知道如何在启动时默认启用它的人,将以下内容添加到配置文件(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,则此方法无效.在这种情况下,唯一的选择是重新启动服务.
验证event_scheduler是否打开-执行以下命令:
SHOW PROCESSLIST;
Run Code Online (Sandbox Code Playgroud)
它将输出一个表/条目,您必须使用User event_scheduler和Command 查找条目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如上所述使用命令验证它是否已正确执行。
如果您希望event_scheduler每次mysql服务器重新启动时自动启动,则应在其中找到[mysqld]的my.ini或my.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)
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变量可以有这个可能的状态:
警告:关键字ON / OFF优先于它们的数字等效项。事实上,Mysql Workbench无法识别配置event_scheduler=1,它在Options File部分显示为OFF。
在 Ubuntu 中使用 Mysql Workbench 8.0.17 和 Mysql Server 5.7.27 进行测试
尽管ON和OFF具有数字等效项,但 SELECT 或 SHOW VARIABLES 为 event_scheduler 显示的值始终是OFF、ON或DISABLED 之一。DISABLED没有数字等效项。因此,在设置此变量时,ON和OFF通常优先于1和0。
来源:https : //dev.mysql.com/doc/refman/5.7/en/events-configuration.html