在这里插入图片描述

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

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

  • 1. 前言
  • 2. 为什么使用 MySQL 定时任务?
  • 3. MySQL 定时任务的基本语法
      • 时间调度表达式
      • 修改与删除
      • 查看任务
  • 4. MySQL 定时任务 vs Quartz、Cron
  • 5. 实战:使用 MySQL 定时任务清理过期日志
      • 5.1 创建示例表
      • 5.2 插入测试数据
      • 5.3 创建定时任务
      • 5.4 验证执行效果
  • 6 实战:每日订单数据归档
      • 6.1 创建归档表
      • 6.2 创建事件
      • 6.3 验证事件状态
      • 6.4 手动测试事件
  • 7. 总结

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,可执行以下命令开启(临时生效)
SET GLOBAL event_scheduler = ON;-- 永久生效(修改 my.cnf 配置)
[mysqld]
event_scheduler=ON

核心语法

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

时间调度表达式

一次性任务:

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

重复执行任务:

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

修改与删除

ON SCHEDULE EVERY 1 DAY
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 创建示例表

CREATE TABLE user_logs (id INT AUTO_INCREMENT PRIMARY KEY,user_id INT NOT NULL,action VARCHAR(100),create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);

5.2 插入测试数据

INSERT INTO user_logs (user_id, action, create_time)
VALUES (1, 'login', NOW() - INTERVAL 40 DAY),(2, 'logout', NOW() - INTERVAL 10 DAY),(3, 'update_profile', NOW() - INTERVAL 35 DAY);

5.3 创建定时任务

CREATE EVENT IF NOT EXISTS clean_user_logs
ON SCHEDULE EVERY 1 DAY
STARTS TIMESTAMP(CURRENT_DATE + INTERVAL 1 DAY)  -- 从明天凌晨开始
DODELETE FROM user_logs WHERE create_time < NOW() - INTERVAL 30 DAY;

5.4 验证执行效果

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

DELETE FROM user_logs WHERE create_time < NOW() - INTERVAL 30 DAY;

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


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

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

6.1 创建归档表

CREATE TABLE orders_archive LIKE orders;
ALTER TABLE orders_archive ADD COLUMN archive_time DATETIME;

6.2 创建事件

DELIMITER $$CREATE EVENT daily_orders_cleanup
ON SCHEDULEEVERY 1 DAY STARTS CURRENT_DATE + INTERVAL 1 DAY + INTERVAL 3 HOUR -- 次日凌晨3点
ON COMPLETION PRESERVE
ENABLE
DO
BEGIN-- 归档旧数据INSERT INTO orders_archive SELECT *, NOW() FROM orders WHERE order_date < CURDATE() - INTERVAL 30 DAY;-- 删除已归档数据DELETE FROM orders WHERE order_date < CURDATE() - INTERVAL 30 DAY;
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分词查询,轻松满足大多数搜索场景的需求
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93454.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93454.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/93454.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis存储原理与对象模型

redis中的不同线程 redis单线程是指什么&#xff1f; redis的所有命令处理都在同一个线程中完成 redis为什么采用单线程&#xff1f; redis中存在多种数据结构存储value&#xff0c;如果采用多线程&#xff0c;加锁会很复杂、加锁力度不阿红控制&#xff0c;同时&#xff0c…

基于微信小程序的家教服务平台的设计与实现/基于asp.net/c#的家教服务平台/基于asp.net/c#的家教管理系统

基于微信小程序的家教服务平台的设计与实现/基于asp.net/c#的家教服务平台/基于asp.net/c#的家教管理系统

安全审计-iptales防火墙设置

文章目录一、iptales防火墙设置1.ip规则设置2.ip端口规则设置3.删除规则4.INPUT默认设置5.ping、本地访问规则6.保存还原规则7.查看清除规则一、iptales防火墙设置 1.ip规则设置 #允许ip访问本服务器 iptables -I INPUT -s 192.168.205.129 -p tcp -j ACCEPT#允许某IP或某网段…

Linux小白加油站,第二周

1.grep命令中哪个选项可以忽略大小写进行搜索?grep -i 2.如何用grep命令查找包含”error关键字的日志文件并返回文件名?grep -lr3.解释grep命令中^f...d$这个表达式的含义^f&#xff1a;以f开头..&#xff1a;任意两个字符d$&#xff1a;以d结尾4.如何过滤掉文件中的注释行以…

【前端基础】19、CSS的flex布局

一、FlexBox概念 FlexBox翻译为弹性盒子。 弹性盒子是一种用于按行或按列布局元素的一维布局方式。元素可以膨胀以填充额外的空间&#xff0c;收缩以适应更小的空间。我们使用FlexBox来进行布局的方案称为flex布局。二、flex布局的重要概念 两个重要的概念 开启flex布局的元素叫…

Effective C++ 条款46:需要类型转换时请为模板定义非成员函数

Effective C 条款46&#xff1a;需要类型转换时请为模板定义非成员函数核心思想&#xff1a;当模板类需要支持隐式类型转换时&#xff0c;应将非成员函数声明为友元并定义在类内部&#xff08;或通过辅助函数实现&#xff09;&#xff0c;以绕过模板参数推导的限制&#xff0c;…

用Python对机器学习数据进行缩放

许多机器学习算法期望数据被一致地缩放。 在为机器学习扩展数据时&#xff0c;你应该考虑两种常用的方法。 在这个教程中&#xff0c;您将了解如何为机器学习重新缩放您的数据。阅读完这个教程后&#xff0c;您将知道&#xff1a; 如何从头开始对您的数据进行标准化。如何从…

Application-properties 配置大全

SpringBoot - application.properties 配置大全 SpringBoot项目最重要也是最核心的配置文件就是application.properties&#xff0c;所有的框架配置都需要在这个配置文件中说明&#xff0c;以下配置不会的可以进行查阅并修改 &#xff03;SPRING CONFIG&#xff08;ConfigFileA…

MXFP4量化:如何在80GB GPU上运行1200亿参数的GPT-OSS模型

大型语言模型&#xff08;Large Language Models, LLMs&#xff09;如GPT-OSS、GPT-4、LLaMA和Mixtral的快速发展显著提升了人工智能的能力边界&#xff0c;但同时也带来了严峻的内存资源挑战。以1200亿参数的模型为例&#xff0c;在FP16精度下仅权重存储就需要约240GB的内存空…

Unity进阶--C#补充知识点--【Unity跨平台的原理】了解.Net

来源于唐老狮的视频教学&#xff0c;仅作记录和感悟记录&#xff0c;方便日后复习或者查找一.什么是.Net.Net是指微软一整套技术体系的统称与代号包含的内容有&#xff1a;框架体系&#xff1a;.Net Frameword&#xff0c; .Net Core&#xff0c; Mono开发语言&#xff1a;C#&a…

论文浅尝 | 提高大型语言模型的数学推理能力的学习定理基本原理(AAAI2025)

笔记整理&#xff1a;兰雅榕&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱、大语言模型论文链接&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/33662发表会议&#xff1a;AAAI 20251. 动机提高开源大型语言模型&#xff08;LLM&#xff09;的数学…

母猪姿态转换行为识别:计算机视觉与行为识别模型调优指南

母猪姿态转换行为识别&#xff1a;计算机视觉与行为识别模型调优指南 1. 引言 1.1 研究背景与意义 母猪姿态转换行为识别是智能养殖领域的重要研究方向&#xff0c;通过计算机视觉技术自动识别母猪的站立、躺卧、行走等姿态变化&#xff0c;对于监测母猪健康状态、评估福利水平…

K8S集群环境搭建(一)

虚拟机镜像 ubuntu 24 虚拟机网络 虚拟网络–配置 nat模式主机ip配置宿主机ip配置 10.0.0.12 master 2c 10.0.0.15 node1 10.0.0.16 node2 10.0.0.17 node3 10.0.0.20 registersudo vi /etc/netplan/00-installer-config.yaml # 替换为实际文件名 sudo netplan applynetwork:v…

css预编译器实现星空背景图

打造梦幻星空背景&#xff1a;用CSS预处理器轻松实现动态效果 星空背景能为网页增添神秘感和视觉吸引力。通过CSS预处理器&#xff08;如Sass/Less&#xff09;可以高效实现可定制化的星空效果&#xff0c;避免重复编写纯CSS代码。以下是 Vue3 组件皮肤具体实现方法和代码示例。…

焊接机器人保护气体效率优化

在现代工业制造领域&#xff0c;焊接机器人的应用日益广泛&#xff0c;而保护气体在焊接过程中起着至关重要的作用。如何优化保护气体的效率&#xff0c;成为焊接技术发展的一个关键考量因素。WGFACS节气装置的出现&#xff0c;为焊接机器人在保护气体效率优化方面带来了显著的…

Portkey-AI gateway 的一次“假压缩头”翻车的完整排障记:由 httpx 解压异常引发的根因分析

笔者最近在本地搭建了Portkey AI Gateway&#xff08;模型路由网关&#xff09;&#xff0c;然后按照文档中的方式进行测试。结果发现&#xff0c;网关能够接收到请求&#xff0c;但是Python测试的程序却运行报错。Python代码报错信息如下&#xff1a; Traceback (most recent …

什么是Session? PHP编程中Session用法详解

一、Session的基本概念 Session 是 Web 开发中用于在服务器端存储用户临时数据的一种机制&#xff0c;它允许服务器在不同的 HTTP 请求之间识别和跟踪特定用户的状态&#xff0c;本质上是‌服务器为每个用户开辟的临时私有存储空间‌。由于 HTTP 协议本身是无状态的&#xff…

【大模型】AI平台 joyagent 2.0 的部署与测试

github链接&#xff1a;https://github.com/jd-opensource/joyagent-jdgenie 本篇博客记录下自己在配置joyagent的过程&#xff0c;以【手动初始化环境&#xff0c;启动服务】为例&#xff0c;后端调用的deepseek-chat大模型。 前言 JoyAgent是由京东云开源的企业级多智能体系统…

计算机视觉(一):nvidia与cuda介绍

背景与意义 计算机视觉 (Computer Vision, CV) 需要对图像和视频进行处理、特征提取和模型训练&#xff0c;计算量巨大。GPU (图形处理单元) 擅长并行计算&#xff0c;非常适合深度学习、卷积操作、矩阵乘法等场景。NVIDIA 作为 GPU 领域的领导者&#xff0c;推出了 CUDA (Comp…

阿里云杭州 AI 产品法务岗位信息分享(2025 年 8 月)

&#xff08;注&#xff1a;本岗位信息已获jobleap.cn授权&#xff0c;可在 CSDN 平台发布&#xff09; 一、基本信息 招聘方&#xff1a;阿里云工作地点&#xff1a;杭州信息收录时间&#xff1a;2025 年 08 月 14 日 二、职位主要职责 为 AI 相关产品全流程提供法务支持&…