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

如何配置MySQL每日00:01-02:00按1分钟间隔执行事件?

解决MySQL事件调度器每日定时区间执行的问题

要实现每日00:01到02:00每分钟执行一次的事件,你原有的写法存在逻辑问题:STARTS 12:01AM和ENDS 02:00AM会被MySQL解析为当前日期的对应时间,事件仅会在当天的该时间段执行一次,无法每日重复触发。

以下是两种可行的解决方案:

方案1:每分钟触发,仅在目标区间执行逻辑

这是最简洁的实现方式,设置事件每分钟执行,但仅在指定时间段内运行业务代码:

CREATE EVENT new_schedule
ON SCHEDULE EVERY 1 MINUTE
STARTS TIMESTAMP(CURRENT_DATE, '00:01:00') -- 从当日00:01开始触发
ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR -- 设置事件结束时间(可按需调整,比如1年后)
ON COMPLETION PRESERVE -- 事件执行完成后保留,不自动删除
DO
BEGIN
    -- 仅在00:01-02:00区间内执行业务逻辑
    IF TIME(NOW()) BETWEEN '00:01:00' AND '02:00:00' THEN
        -- 这里写入你的业务代码,比如:
        -- INSERT INTO your_table (log_time) VALUES (NOW());
    END IF;
END;

方案2:每日触发,生成当日区间内的定时任务

如果需要严格控制事件仅在每日00:01-02:00启动,可以创建一个每日00:00触发的事件,动态生成当日的分钟级任务(适合更复杂的调度场景):

-- 先创建每日初始化事件
CREATE EVENT daily_schedule_init
ON SCHEDULE EVERY 1 DAY
STARTS TIMESTAMP(CURRENT_DATE, '00:00:00')
ON COMPLETION PRESERVE
DO
BEGIN
    -- 删除前一日的分钟级事件(如果存在)
    DROP EVENT IF EXISTS daily_minute_schedule;
    
    -- 创建当日00:01到02:00的分钟级事件
    CREATE EVENT daily_minute_schedule
    ON SCHEDULE EVERY 1 MINUTE
    STARTS TIMESTAMP(CURRENT_DATE, '00:01:00')
    ENDS TIMESTAMP(CURRENT_DATE, '02:00:00')
    ON COMPLETION NOT PRESERVE -- 当日结束后自动删除
    DO
    BEGIN
        -- 这里写入你的业务代码
        -- INSERT INTO your_table (log_time) VALUES (NOW());
    END;
END;

关键注意事项

  1. 开启事件调度器:确保MySQL的事件调度器处于开启状态,执行以下命令:

    SET GLOBAL event_scheduler = ON;
    

    可通过SHOW VARIABLES LIKE 'event_scheduler';查看当前状态。

  2. 权限要求:创建事件需要EVENT权限,确保你的数据库账号拥有该权限。

内容的提问来源于stack exchange,提问作者s.k.paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:42:43