如何创建RDS MySQL定时任务?

当您需要在RDS MySQL中执行定时和周期性任务,例如定时发送统计报告、定时同步数据或定期清理过期数据等时,您可以使用事件调度(Event Scheduler)功能,根据预定计划自动执行数据库中定义的事件。

Event Scheduler 是 MySQL 中用于执行定时任务的组件,它允许用户在指定时间或按固定间隔自动执行 SQL 语句。

准备工作:

已拥有阿里云账号,若在上云或数据库迁移上云过程中有不懂的,可寻云枢国际@yunshuguoji助力免卡上云用云。

已创建具备目标数据库EVENT权限的RDS MySQL账号,即高权限账号、普通账号(读写)或普通账号(仅DML)。

 

步骤一:开启Event Scheduler

请首先确认Event Scheduler已被启用,随后再进行定时任务的创建。

 

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏中单击参数设置。
  3. 在可修改参数页搜索event_scheduler,并确保运行参数值设置为ON。
  4. 如果修改了该参数值,请单击提交参数,并在弹出的窗口中,选择立刻生效,并单击确定。

 

步骤二:创建定时任务

  • 通过DMS控制台创建

1.单击页面右上角的登录数据库,进入DMS的快捷登录页面,使用RDS MySQL账号登录数据库实例,详情请参见通过DMS登录RDS数据库。

说明:登录数据库实例时,管控模式选为自由操作。DMS管控模式的更多信息请参见管控模式。

2.在SQLConsole窗口中执行如下SQL创建测试表students。

说明:如果使用数据库中已经存在的表,可以跳过此步骤,并在后续的事件语句中使用相应的SQL语句。

CREATE TABLE students (

`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘id’,

`name` varchar(64) NOT NULL COMMENT ‘name’,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

  1. 在SQL窗口的可视化操作区域单击可编程对象,并在事件上单击鼠标右键,选择新建(事件)。

如何创建RDS MySQL定时任务?

 

4.在新建(事件)页签,设置事件参数。

本文以事件名称为test01,调度方式循环时间间隔为10分钟,事件语句以为测试表students插入数据为例。

事件语句示例:

Begin

INSERT INTO students(name) VALUES(‘zhangsan’);

End

5.单击保存,在弹出的提交变更窗口确认SQL语句无误后,单击直接执行。

 

您可以在可编程对象页签的事件下查看新增的定时任务。您也可以在SQL窗口执行SHOW EVENTS;,查看定时任务的详细信息。

 

说明:使用SHOW EVENTS;查询时,如果事件的状态为ENABLED,表示事件已启用。

 

  • 通过SQL语句创建

CREATE

[DEFINER = user]

EVENT

[IF NOT EXISTS]

event_name

ON SCHEDULE schedule

[ON COMPLETION [NOT] PRESERVE]

[ENABLE | DISABLE | DISABLE ON SLAVE]

[COMMENT ‘string’]

DO event_body;

 

schedule:

{

AT timestamp [+ INTERVAL interval] …

| EVERY interval

[STARTS timestamp [+ INTERVAL interval] …]

[ENDS timestamp [+ INTERVAL interval] …]

}

interval:

quantity {

YEAR

| QUARTER

| MONTH

| DAY

| HOUR

| MINUTE

| WEEK

| SECOND

| YEAR_MONTH

| DAY_HOUR

| DAY_MINUTE

| DAY_SECOND

| HOUR_MINUTE

| HOUR_SECOND

| MINUTE_SECOND

}

示例例如,每天凌晨2点,删除user_order表中30天前的数据,其中user_order表的create_time字段记录了每一行数据的写入时间。

DELIMITER $$CREATE EVENT IF NOT EXISTS delete_old_user_ordersON SCHEDULE

EVERY 1 DAY

STARTS TIMESTAMP(CURRENT_DATE, ’02:00:00′) + INTERVAL 1 DAY — 次日凌晨2点开始

COMMENT –每日删除30天前的订单数据

DOBEGIN

— 删除逻辑(create_time为时间字段)

DELETE FROM user_order

WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY);

 

— 可选:记录操作日志(需先创建log表)

— INSERT INTO task_log (message) VALUES (‘Deleted old user_orders’);END$$

DELIMITER ;

 

步骤三:查看定时任务执行结果

查看事件的执行结果时,可以通过检查事件中的SQL语句的执行情况来判断。

 

如果SQL语句执行成功,则可以通过检查相关表来验证结果。

 

如果SQL语句执行失败,您可以通过查看错误日志来获取更多详细信息。

 

您可以开启SQL洞察和审计,通过日志记录来查看定时任务的执行结果。

 

说明:通过执行SQL语句SELECT * FROM information_schema.events;,可以确认现存的定时任务及其相关信息,例如定时任务的创建时间、最后修改时间、最近一次执行时间以及是否处于启用状态等。

步骤四:删除定时任务
数据管理DMS是一款支撑数据全生命周期的一站式数据管理平台。提供全域数据资产管理、数据治理、数据库设计开发、数据集成、数据开发和数据消费等功能,同时DMS内置的数据灾备(DBS)还提供了低成本、高可靠的备份恢复能力,致力于帮助企业高效、安全地挖掘数据价值,助力企业数字化转型。

  • 通过DMS控制台删除

说明:如果您在创建循环事件时,设置了到期删除和结束时间,那么循环事件到期后会自动删除,无需手动删除。

  1. 在可编程对象页签的事件下,右键单击目标事件,选择删除(事件)。
  2. 在弹出的窗口,单击直接执行。

说明:您也可以在SQL窗口,执行DROP EVENT <事件名称>;命令,删除对应的事件。

  • 通过SQL语句删除

执行DROP EVENT <事件名称>;命令,删除对应的事件。

相关新闻

联系我们

联系我们

电报:@yunshuguoji

邮件:yunshuguoji@outlook.com

工作时间:早上8:00-晚上11:00

认准电报
认准电报
分享本页
返回顶部