本文介绍如何使用数据管理DMS任务编排高效地实现事件调度。

背景信息

传统的数据库事件调度(如MySQL的事件调度器Event Scheduler)虽然功能强大,但在使用过程中仍发现一些不足:
  • 门槛高:用户需要掌握事件定义的特殊SQL语法(CREATE EVENTALTER EVENT),无法通过简单的界面完成配置。
  • 强依赖数据库内核:内核需要支持并开启事件调度器。
  • 受限单个数据库:只能针对单个数据库进行调度,无法与其他数据库或工具进行联动。
  • 难追踪:无法查看调度事件的执行状态、执行历史、运行时长等信息。
  • 难运维:无法对事件执行暂停、重跑等操作,事件执行失败也无法恢复。
  • 无通知:事件执行状态(成功或失败)无法主动通知到用户(短信、Email等)。
为解决这些问题,我们推荐您使用DMS的任务编排功能,它并不依赖数据库内核的事件调度能力,而是一个外部独立的任务编排与调度系统。任务编排功能的特点如下:
  • 支持十几种数据库引擎(MySQL、Oracle、PostgreSQL、SQL Server等)和多种生态工具(数据迁移、备份、跨库分析等),可以轻松实现跨库、跨产品功能组合联动。
  • 支持可视化的编辑界面,可以通过拖拽和简单的配置即可创建出十分复杂的调度任务。
  • 支持多种消息通知机制(钉钉、短信、邮件等)。
  • 支持暂停终止重跑等多种运维操作。

操作步骤

本示例通过DMS任务编排实现event_click_archive事件。该事件的描述:希望从2020年12月1日开始,每天0点钟把user_click表中两天前的数据转储到click_history表(历史表)中并删除user_click表中的对应数据,user_click表中始终只保留当前日期前一天的数据。

该事件的SQL代码如下。

DELIMITER |

CREATE EVENT IF NOT EXISTS event_click_archive
ON SCHEDULE EVERY 1 DAY STARTS '2020-12-01 00:00.00'
ON COMPLETION PRESERVE
COMMENT '定期归档user_click表数据'
DO
  BEGIN
    INSERT INTO click_history SELECT * FROM user_click
      WHERE create_time < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY);
    DELETE FROM user_click WHERE create_time < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY);
  END |

DELIMITER ;
  1. 登录新版DMS控制台
  2. 在页面顶部,选择全部功能 > 数据工厂 > 任务编排
  3. 任务编排页面的自由编排任务区域,单击新建任务流
  4. 新建任务流对话框,将任务流名称设置为df_archive_click,将描述设置为测试,单击确认。即会进入任务编排页面。
    新建任务流
  5. 任务编排页面的左侧任务类型中,选择数据库运维 > 单实例SQL,并拖拽至页面中的空白区域。
    拖入单实例SQL
  6. 单击单实例SQL节点,在右侧面板中单击内容设置页签,配置以下信息。
    1. 数据库列表中,选择目标实例。
    2. 输入以下建表语句。
      INSERT INTO click_history SELECT * FROM user_click
            WHERE create_time < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY);
            
      DELETE FROM user_click WHERE create_time < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY);
      说明 任务编排并不支持 本地变量(Local Variable)。如果事件定义中使用了本地变量,那么在迁移至任务编排中的时候,需统一修改为 用户自定义变量(User-Defined Variables)并用 SET命令进行赋值。如下是一组示例。

      事件定义中的SQL:

      DECLARE n_total BIGINT DEFAULT 0;
      SELECT COUNT(*) INTO n_total FROM test_table;

      任务编排中的SQL:

      SET @n_total := (SELECT COUNT(*) FROM test_table);
    3. 完成以上配置后,单击保存按钮。
      设置内容
  7. 单击任务流中画布的空白处,在右侧面板中单击调度配置页签,打开开启调度按钮,配置如下信息,并单击保存

    该操作会设置:从2020年12月1日开始,每天0点自动按天调度(执行)该任务。

    至此,该任务流(df_archive_click)已经具备了与event_click_archive事件完全一致的调度行为,可以完全替代event_click_archive事件。此外,DMS任务编排还提供了多种MySQL事件所没有的功能,例如消息通知和运行状态的追踪。

    开启调度信息
    说明 任务流调度周期支持每月、每周、每天等多维度配置,您可以按需求选择调度周期,更多信息请参见 开启调度配置
  8. 在右侧面板中单击基础属性页签,配置相关人员,并打开开启消息通知开关。
    打开消息通知
    说明 任务编排集成了消息通知功能,支持将任务调度状态(执行成功或执行失败)第一时间推送给目标用户,更多信息,请参见 配置基础属性消息通知管理
  9. 单击页面左上方的试运行按钮执行任务。

后续步骤

您可以在运维中心查看任务运行结果。

运维中心
说明 运维中心页面展示了任务流每一次执行的状态( 成功失败执行中)与起止时间,同时您也可以在该页面进行运维操作( 暂停重跑等)。