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

如何创建每年每季度末月最后周日指定时间自动执行的MySQL事件

结论

MySQL 内置事件调度器不支持直接配置「每年每季度最后一个月最后一个周日指定时刻」这类叠加了周、月、季度规则的复杂调度,原生调度能力仅支持固定间隔、固定时间点的触发规则,无法直接识别这类需要动态计算日期的触发条件。

具体实现方式

可根据部署环境选择以下两种可落地的方案:

方案1:纯MySQL内部实现(无外部依赖)

核心逻辑是降低事件的调度粒度,在事件内部增加日期判断,只有命中目标规则时才执行实际业务逻辑:

  1. 首先开启MySQL事件调度器,执行以下命令临时生效:
    SET GLOBAL event_scheduler = ON;
    同时要在MySQL配置文件my.cnf/my.ini的[mysqld]段添加event_scheduler=ON,避免数据库重启后调度器失效。
  2. 创建事件,比如要求触发时间为目标日期的凌晨2点,示例代码如下:
DELIMITER //
CREATE EVENT evt_quarter_last_sunday_task
ON SCHEDULE EVERY 1 WEEK
STARTS '2024-03-31 02:00:00' -- 首次执行时间选一个已确认符合规则的历史/未来时间点即可
ON COMPLETION PRESERVE
ENABLE
DO
BEGIN
  -- 命中规则判断:当前是3/6/9/12季度末月 + 当天是周日 + 7天后日期超出当月范围(即当前是当月最后一周)
  IF MONTH(CURDATE()) IN (3,6,9,12)
     AND DAYOFWEEK(CURDATE()) = 1 -- MySQL中DAYOFWEEK返回1代表周日,2代表周一,依次类推
     AND DATE_ADD(CURDATE(), INTERVAL 7 DAY) > LAST_DAY(CURDATE())
  THEN
    -- 此处替换为实际要执行的业务SQL,比如调用存储过程、执行数据更新/统计语句等
    -- CALL your_business_procedure();
  END IF;
END //
DELIMITER ;

该方案不需要额外依赖其他组件,事件每周触发一次,不满足判断条件时直接退出,性能损耗可以忽略。

方案2:配合操作系统定时任务(更稳定无空触发)

如果不想在MySQL侧配置高频空跑的事件,可以直接用操作系统原生的定时能力实现:

  • Linux环境用crontab,Windows环境用任务计划程序,配置为每年3、6、9、12月的每个周日在目标时刻触发执行脚本,脚本内先判断当前日期是否为当月最后一个周日,命中规则再调用mysql命令执行业务SQL。
    以Linux环境凌晨2点触发为例:
  1. 编写执行脚本quarter_task.sh:
#!/bin/bash
# 日期规则判断
cur_month=$(date +%m)
next_week_date=$(date -d "+7 days" +%Y-%m-%d)
cur_month_last_day=$(date -d "$(date +%Y-%m-01) +1 month -1 day" +%Y-%m-%d)
cur_dow=$(date +%u) # 该命令返回7代表周日

if [[ $cur_month =~ 03|06|09|12 ]] && [[ $next_week_date > $cur_month_last_day ]] && [[ $cur_dow -eq 7 ]];then
  mysql -u数据库用户名 -p数据库密码 业务库名 -e "此处替换为要执行的业务SQL"
fi
  1. 给脚本加执行权限:chmod +x /your_script_path/quarter_task.sh
  2. 配置crontab规则,执行crontab -e添加以下行:
    0 2 * * 3,6,9,12 0 /bin/bash /your_script_path/quarter_task.sh
    该方案调度逻辑在系统层,不受数据库运行状态、参数配置影响,稳定性更高,适合生产环境使用。
注意事项
  • 所有日期判断逻辑要提前验证,注意时区一致性:MySQL时区、服务器系统时区要和业务预期时区保持一致,避免触发时间偏移。
  • 如果用纯MySQL事件方案,要定期检查事件状态,可通过SHOW EVENTS;命令查看事件的启用状态、最后执行时间。
  • 生产环境优先选择系统层定时任务方案,避免MySQL重启、调度器异常关闭导致任务漏执行。

内容的提问来源于stack exchange,提问作者Mickey Mouse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:00:53