MySQL定时任务详解 - Event Scheduler 事件调度器从基础到实战

MySQL定时任务详解 - Event Scheduler 事件调度器从基础到实战
在这里插入图片描述
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》专栏19年编写主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
🌛《开源项目》本专栏主要介绍目前热门的开源项目,带大家快速了解并轻松上手使用
🍎 《前端技术》专栏以实战为主介绍日常开发中前端应用的一些功能以及技巧,均附有完整的代码示例
✨《开发技巧》本专栏包含了各种系统的设计原理以及注意事项,并分享一些日常开发的功能小技巧
💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程
🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整
👍《Spring Security》专栏中我们将逐步深入Spring Security的各个技术细节,带你从入门到精通,全面掌握这一安全技术
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

MySQL定时任务详解 - 事件调度器从基础到实战

1. 前言

在日常开发中,我们经常会遇到“定时执行任务”的需求,比如每天凌晨清理历史数据、定时归档日志、定期统计报表汇总等。

通常情况下,我们会选择 任务调度器 来实现,例如Quartz、xxl-job、Crontab。但其实,MySQL 自身也内置了定时任务(Event Scheduler)功能,可以直接在数据库层面实现调度。

在这里插入图片描述

虽然MySQL自身也内置了定时任务非项目中常用,但是了解掌握这门技术还是有必要的,在一些极简功能项目,或许你会用到它,本文博主将带小伙伴了解 MySQL 定时任务 的使用方法,通过一个完整的示例来实践。


2. 为什么使用 MySQL 定时任务?

MySQL从5.1.6版本开始内置了事件调度器(Event Scheduler),允许在数据库内部创建定时执行的任务,无需外部应用介入

典型场景:

  • 定时清理过期数据(如用户临时表、日志表)
  • 定时生成统计报表并写入汇总表
  • 定时归档数据(冷数据转存)

优点:

无需额外依赖第三方任务调度框架;
与数据库耦合,执行效率较高;
任务存储在 MySQL 内部,跨服务部署也能保证执行;

缺点:

灵活性不如 Quartz 等专业任务调度框架;
任务执行依赖 MySQL 的稳定性(数据库挂了,任务也无法执行);
缺乏复杂的任务管理与监控(需要手工实现日志);

3. MySQL 定时任务的基本语法

在使用前,需要确认事件调度器是否开启:

-- 查看事件调度器是否开启SHOW VARIABLES LIKE'event_scheduler';-- 如果为 OFF,可执行以下命令开启(临时生效)SETGLOBAL event_scheduler =ON;-- 永久生效(修改 my.cnf 配置)[mysqld] event_scheduler=ON

核心语法

CREATE EVENT [IFNOTEXISTS] 事件名称 ON SCHEDULE schedule_expression -- 调度时间设置[ON COMPLETION [NOT] PRESERVE]-- 执行后是否保留[ENABLE|DISABLE|DISABLEON SLAVE]-- 状态DO event_body;-- 执行的SQL或存储过程

时间调度表达式

一次性任务:

ON SCHEDULE AT TIMESTAMP'2025-08-18 10:00:00'

重复执行任务:

ON SCHEDULE EVERY 1DAY STARTS TIMESTAMP'2025-08-18 00:00:00' ENDS TIMESTAMP'2025-08-31 23:59:59'

修改与删除

ON SCHEDULE EVERY 1DAY STARTS TIMESTAMP'2025-08-18 00:00:00' ENDS TIMESTAMP'2025-08-31 23:59:59'

查看任务

SHOW EVENTS;

4. MySQL 定时任务 vs Quartz、Cron

在这里插入图片描述
特性MySQL Event SchedulerQuartzCron
部署方式内置数据库,无需额外安装Java库,需要集成到项目中系统级任务调度器
表达式灵活度支持简单的 EVERY/AT支持复杂的 Cron 表达式标准 Cron 表达式
可靠性依赖数据库依赖应用服务依赖操作系统
可监控性无内置监控,需手工记录提供 Listener/日志可通过日志查看
适用场景数据清理、归档、统计企业级复杂任务调度系统任务,如脚本执行

使用建议:

如果只是做 数据库内部的小型定时操作,用 MySQL 定时任务即可。
如果需要 分布式、复杂调度、监控告警Quartz、xxl-job 更合适。
如果是 系统层面的脚本,可以交给 Cron

5. 实战:使用 MySQL 定时任务清理过期日志

假设有一个日志表 user_logs,我们希望每天凌晨自动清理 30 天前的日志

5.1 创建示例表

CREATETABLE user_logs ( id INTAUTO_INCREMENTPRIMARYKEY, user_id INTNOTNULL,actionVARCHAR(100), create_time DATETIMEDEFAULTCURRENT_TIMESTAMP);

5.2 插入测试数据

INSERTINTO user_logs (user_id,action, create_time)VALUES(1,'login',NOW()-INTERVAL40DAY),(2,'logout',NOW()-INTERVAL10DAY),(3,'update_profile',NOW()-INTERVAL35DAY);

5.3 创建定时任务

CREATE EVENT IFNOTEXISTS clean_user_logs ON SCHEDULE EVERY 1DAY STARTS TIMESTAMP(CURRENT_DATE+INTERVAL1DAY)-- 从明天凌晨开始DODELETEFROM user_logs WHERE create_time <NOW()-INTERVAL30DAY;

5.4 验证执行效果

手动执行一次删除逻辑来测试:

DELETEFROM user_logs WHERE create_time <NOW()-INTERVAL30DAY;

然后观察表中是否只保留近 30 天的记录


6 实战:每日订单数据归档

每天凌晨3点将超过30天的订单数据归档到 orders_archive 表,并删除原表数据。

6.1 创建归档表

CREATETABLE orders_archive LIKE orders;ALTERTABLE orders_archive ADDCOLUMN archive_time DATETIME;

6.2 创建事件

DELIMITER $$ CREATE EVENT daily_orders_cleanup ON SCHEDULE EVERY 1DAY STARTS CURRENT_DATE+INTERVAL1DAY+INTERVAL3HOUR-- 次日凌晨3点ON COMPLETION PRESERVE ENABLEDOBEGIN-- 归档旧数据INSERTINTO orders_archive SELECT*,NOW()FROM orders WHERE order_date < CURDATE()-INTERVAL30DAY;-- 删除已归档数据DELETEFROM orders WHERE order_date < CURDATE()-INTERVAL30DAY;END$$ DELIMITER;

6.3 验证事件状态

-- 查看所有事件SHOW EVENTS;-- 检查事件最后执行时间SELECT*FROM information_schema.events WHERE event_name ='daily_orders_cleanup';

6.4 手动测试事件

-- 立即测试事件ALTER EVENT daily_orders_cleanup ENABLE;CALL mysql.rds_run_event('daily_orders_cleanup');-- 查看执行日志(需开启通用日志)SHOW VARIABLES LIKE'general_log';

7. 总结

MySQL定时任务 提供了一种快速、轻量化的调度方式,特别适合数据清理、归档、统计等数据库内部操作。
它可以减少对外部任务调度框架的依赖,在一些中小型项目中非常实用。
但在复杂调度、分布式任务、可视化监控等方面,它不如 Quartz、xxl-job 等专业工具。

建议使用场景:
轻量级任务:定时删除、归档、统计。
单机数据库:对高可用和任务监控要求不高的项目。
临时需求:快速上线一个定时任务时。

通过本文相信小伙伴们已掌握MySQL事件的核心用法及其适用场景。对于简单的数据库维护任务,原生事件是高效的选择;而涉及业务逻辑的复杂调度,Quartz等专业框架仍是首选。根据实际场景合理选择技术方案,才能最大化系统效能。

如果你在实践过程中有任何疑问或更好的扩展思路,欢迎在评论区留言,最后希望大家一键三连给博主一点点鼓励!


专栏回顾:
【01】阿里巴巴开源异构数据源离线/全量/增量同步工具 - DataX
【02 】MySQL中的六种日志你都懂么?不懂!那就必须看看
【03】MySQL数据库数据恢复方案应对没有where误操作导致的大量数据更新或删除
【04】你还在手写数据库文档?推荐一款数据库文档生成工具screw
【05】分词搜索必须上Elasticsearch?试试MySQL分词查询,轻松满足大多数搜索场景的需求

Read more

微调模型成本太高,用RAG技术,低成本实现AI升级

微调模型成本太高,用RAG技术,低成本实现AI升级

文章目录 * 大模型 RAG 技术深度解析:从入门到进阶 * 一、大语言模型(LLM)的三大痛点 * 1.1 幻觉问题:一本正经地胡说八道 * 1.2 时效性问题:知识更新不及时 * 1.3 数据安全问题:敏感信息泄露风险 * 二、RAG 技术:检索增强生成 * 2.1 RAG 的定义 * 2.2 RAG 的架构 * 2.2.1 检索器模块 * 2.2.2 生成器模块 * 三、使用 RAG 的八大优势 * 3.1 可扩展性:减少模型大小和训练成本 * 3.

By Ne0inhk
Flutter for OpenHarmony:mqtt_client 连接 MQTT 代理,实现物联网(IoT)设备实时状态监控(轻量级发布订阅协议) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:mqtt_client 连接 MQTT 代理,实现物联网(IoT)设备实时状态监控(轻量级发布订阅协议) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 MQTT (Message Queuing Telemetry Transport) 是一种极轻量级的发布/订阅消息传输协议,广泛应用于物联网(IoT)、移动应用和车载设备。在智能家居控制、设备状态上报等场景中,APP 往往需要实时接收设备发来的消息。 mqtt_client 是 Dart 生态中最流行的 MQTT 客户端库,支持 MQTT 3.1 和 3.1.1 协议。它能够在 OpenHarmony 应用中稳定运行,帮助开发者轻松构建物联网控制端。 一、概念介绍/原理解析 1.1 基础概念 * Broker (代理): 消息的转发服务器(如

By Ne0inhk
从0到1快速学会Linux操作系统(基础),这一篇就够了!

从0到1快速学会Linux操作系统(基础),这一篇就够了!

目录在左侧或者右侧,可以根据需求点击快速跳转对应章节进行学习。 一、认识Linux 1.1什么是操作系统? 软件的一种,用户和计算机硬件之间的桥梁。 操作系统是计算机软件的一种,它主要负责: 作为用户和计算机硬件之间的桥梁,调度和管理计算机硬件进行工作。 而计算机,如果没有操作系统,就是一堆无法使用的垃圾而已。 用户控制操作系统,操作系统安排硬件干活。不管是PC操作系统还是移动操作系统其功能都是:调度硬件进行工作,充当用户和硬件之间的桥梁。 1.2 什么是linux?保护模式下的操作系统 创始人 : 林纳斯 托瓦兹,Linux 诞生于 1991 年,作者上大学期间。因为创始人在上大学期间经常需要浏览新闻和处理邮件,发现现有的操作系统不好用 , 于是他决心自己写一个保护模式下的操作系统,这就是 Linux 的原型, 当时他 21 岁,后来经过全世界网友的支持 , 现在能够兼容多种硬件,成为最为流行的服务器操作系统之一。 1.3 什么是Linux内核?毛坯房 内核是 Linux

By Ne0inhk
未来的鸿蒙 App,还需要“首页”吗?

未来的鸿蒙 App,还需要“首页”吗?

子玥酱(掘金 / 知乎 / ZEEKLOG / 简书 同名) 大家好,我是子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。 我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案, 在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。 技术方向:前端 / 跨端 / 小程序 / 移动端工程化 内容平台:掘金、知乎、ZEEKLOG、简书 创作特点:实战导向、源码拆解、少空谈多落地 文章状态:长期稳定更新,大量原创输出 我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、

By Ne0inhk