求助:MySQL事件未按时执行,Event Scheduler状态为ON
看起来你的事件调度器已经在运行,但事件没按预期执行,咱们一步步来揪出问题所在:
检查事件是否处于启用状态
先执行这条命令确认事件的状态:SHOW EVENTS LIKE 'my_event';重点看结果里的
STATUS列,如果显示DISABLED,那就是事件被禁用了,执行下面的命令启用它:ALTER EVENT dbname.my_event ENABLE;验证时间设置与时区一致性
你的事件起始时间是2018-05-30 22:58:00,虽然是过去的时间,但EVERY 1 DAY应该会持续执行,不过要确认MySQL的时区是否和你预期的一致:SELECT @@global.time_zone, @@session.time_zone;如果服务器时区和你设置事件时的时区不一样,实际执行时间会偏移,比如你按东八区设置,但服务器用UTC,那实际执行时间会晚8小时。
检查DEFINER权限与存储过程可用性
事件的DEFINER是db_admin@%,这个账号需要有执行那两个存储过程的权限。你可以手动调用存储过程测试:CALL dbname.stored_procedure_1(); CALL dbname.stored_procedure_2();如果调用时报错(比如权限不足、存储过程不存在或内部逻辑错误),那事件执行时也会失败,需要先修复存储过程或给账号赋权。
查看MySQL错误日志
MySQL执行事件出错时,通常会把错误信息写入错误日志。先找到日志路径:SHOW VARIABLES LIKE 'log_error';打开日志文件,搜索
my_event相关的条目,看看有没有执行失败的具体原因,比如存储过程执行报错、权限问题等。确认事件调度器的持久化设置
虽然你看到processlist里有Sleep的调度器进程,但要确保event_scheduler是全局开启且持久化的。执行:SELECT @@event_scheduler;如果结果是
ON,再检查你的MySQL配置文件(my.cnf/my.ini)里有没有event_scheduler=ON,不然重启MySQL后调度器会自动关闭。查看事件执行历史(MySQL 8.0+适用)
如果你用的是MySQL 8.0及以上版本,可以查询事件执行历史表,获取详细的执行记录:SELECT * FROM information_schema.EVENT_STATEMENTS_HISTORY WHERE EVENT_NAME = 'my_event';这里能看到事件每次执行的时间、状态、错误信息,帮你快速定位问题。
内容的提问来源于stack exchange,提问作者Pouria

