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. 前言
  • 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 相關產品全流程提供法務支持&…