WampServer下MySQL每日9/10点定时事件异常:前者运行后后者失效
解决MySQL定时事件第二个无法执行的问题
看起来你在WampServer环境下的MySQL定时事件遇到了执行异常——第一个9点的事件能正常运行,第二个10点的却不行。咱们从最明显的问题入手,一步步排查解决:
首先,修正事件的调度语法(最可能的根源)
你给出的第一个事件代码里,EVERY 9 DAY_HOUR 是错误的间隔写法!DAY_HOUR 是用来组合“天+小时”的间隔(比如EVERY 1 DAY 2 HOUR表示每1天2小时执行一次),而你要实现每日固定时间执行,正确的写法应该是指定每天执行,同时把起始时间设为对应的整点。
修正后的9点事件代码
CREATE DEFINER=`servidoranim`@`%` EVENT `ACTTICKETS9AM` ON SCHEDULE EVERY 1 DAY STARTS '2018-04-01 09:00:00' ENDS '2018-05-01 00:00:00' ON COMPLETION PRESERVE ENABLE DO UPDATE tickets SET tickets.Estatus = 1 WHERE tickets.Estatus = 0 AND DATE(tickets.你的日期字段) = CURDATE(); -- 记得补全你原本的日期条件
对应的10点事件示例代码
CREATE DEFINER=`servidoranim`@`%` EVENT `ACTTICKETS10AM` ON SCHEDULE EVERY 1 DAY STARTS '2018-04-01 10:00:00' ENDS '2018-05-01 00:00:00' ON COMPLETION PRESERVE ENABLE DO -- 这里写入你10点需要执行的SQL逻辑
然后,检查事件状态与执行日志
- 确认两个事件都处于启用状态
执行这条SQL查看所有事件的状态:
SELECT EVENT_NAME, STATUS, SCHEDULE FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_SCHEMA = '你的数据库名';
如果第二个事件的STATUS是DISABLED,用下面的语句启用它:
ALTER EVENT `ACTTICKETS10AM` ENABLE;
- 查看MySQL错误日志找报错信息
WampServer的MySQL日志在wamp64\logs\mysql.log路径下,打开日志搜索第二个事件的名称ACTTICKETS10AM,看看是不是有SQL语法错误、权限不足或者锁表超时的报错——这些都是导致事件执行失败的常见原因。
最后,排查其他潜在问题
- 锁表阻塞:如果第一个事件的
UPDATE语句执行时间太长,会把tickets表锁住,第二个事件的SQL可能因为等待锁超时而失败。可以给tickets表的查询字段(比如Estatus和日期字段)加索引,或者优化UPDATE语句减少执行时间。 - 时区偏差:MySQL的时区如果和你预期的不一致,会导致事件执行时间错位。执行这条SQL查看当前时区:
SELECT @@global.time_zone, @@session.time_zone;
如果时区不对,找到WampServer下的MySQL配置文件my.ini(路径一般是wamp64\bin\mysql\mysqlX.X.X\my.ini),添加或修改时区设置:
default-time-zone = '+08:00' -- 换成你所在的时区,比如UTC+8
修改后重启MySQL服务生效。
- 权限不足:确保
servidoranim用户拥有创建、执行事件的权限,以及对tickets表的更新权限。
内容的提问来源于stack exchange,提问作者David Magnum
相关产品推荐
相关产品推荐

