You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:MySQL事件未按时执行,Event Scheduler状态为ON

排查MySQL事件未执行的常见原因

看起来你的事件调度器已经在运行,但事件没按预期执行,咱们一步步来揪出问题所在:

  • 检查事件是否处于启用状态
    先执行这条命令确认事件的状态:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:39:12