- 文档首页
云数据库 MySQL 版
内核功能
功能
设置定时和周期性任务
设置定时和周期性任务
本文介绍两种设置定时任务和周期性任务的方法:使用 MySQL 的事件调度器(Event Scheduler)以及使用数据库工作台(DBW)。
使用 MySQL 的事件调度器(Event Scheduler)创建定时任务和周期性任务
- MySQL 5.7 版本,且内核小版本为 MySQL 5.7.44_20260215 及以上。
- MySQL 8.0 版本,且内核小版本为 MySQL 8.0.43_20260215 及以上。
说明
- 若 MySQL 的版本不满足条件,则不推荐使用 Event Scheduler,因为旧版本中在主备节点切换后,主节点与备节点的 Event 状态会出现不同步的情况,从而致使 Event 调度失败。
- 若在 MySQL 的版本不满足条件时创建过 Event,之后将 MySQL 升级到了满足条件的版本,推荐在升级后将之前的定时任务全部删除重建,否则之前的定时任务仍会在主备节点切换后调度失败。
在使用 Event Scheduler 之前,需要先将参数 event_scheduler 和 loose_event_replica_consistent 设置为 ON。
创建定时任务的语法如下:
CREATE EVENT [IF NOT EXISTS] event_name
其中 event_name 替换成任务名,sql_statement 替换成任务对应的 SQL 语句,schedule 替换成执行周期,具体用法见如下示例:
- 示例 1:单次任务( 1 小时后自动向日志表插入1 条记录)
CREATE EVENT insert_log_once
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
INSERT INTO my_log (message, created_at) VALUES ('任务已自动执行', NOW());
- 示例 2:周期性任务(每天自动清理一次超过 30 天的过期订单数据)
CREATE EVENT purge_old_orders
DELETE FROM orders WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
- 示例 3:带有效期的周期性任务(从月初开始,每隔 1 小时汇总一次数据,直到月底结束)
CREATE EVENT hourly_report
ON SCHEDULE EVERY 1 HOUR
STARTS '2024-01-01 00:00:00'
ENDS '2024-01-31 23:59:59'
CALL generate_hourly_report();
执行以下语句查看所有定时任务:
删除定时任务的语法如下:
DROP EVENT [IF EXISTS] event_name
需将 event_name 替换成待删除的任务的名称。
使用 DBW 为 MySQL 创建定时任务和周期性任务
在 DBW,可以为云数据库 MySQL 版创建定时或周期性任务。关于创建定时或周期性任务的详细信息,请参见任务管理。 MySQL 原生的事件调度器(Event Scheduler)与数据库工作台(DBW)均可创建和管理定时任务及周期性任务。通过这两种方式创建的定时任务与周期性任务彼此独立,各自执行。建议您挑选其中一种方法使用,在使用其中一种方法管理定时任务和周期性任务之前,先清理另一种方法创建的定时任务和周期性任务。
最近更新时间:2026.05.28 11:52:20