MySQL整库全增量(准实时)同步至MaxCompute

数据集成目前支持将ApsaraDB for OceanBase、MySQL、Oracle、PolarDB等源头的数据整库全增量(准实时)同步至MaxCompute。该同步链路支持全增量一体化同步,先进行全量数据迁移,然后再实时同步增量数据至目标端。本文以MySQL为源端、MaxCompute为目标端场景为例,为您介绍如何创建MySQL整库全增量(准实时)同步至MaxCompute。

前提条件

背景信息

本同步链路运行后会自动建立Merge任务,用于将全增量数据进行合并,其中,增量数据实时写入MaxComputeLog表,Log表再定期与Base表进行合并(Merge),最终将结果写入Base表中。目前全增量Merge的频率为一天一次。

同步任务属性

说明

可同步的表个数

  • 支持将源端多表数据写入至目标端多表。

  • 支持通过目标表配置规则实现源端多表数据写入至目标端单表。

任务组成

当前同步任务将分别创建用于全量数据初始化的离线同步子任务,和用于增量数据实时同步的数据集成实时同步子任务,同步任务产生的离线同步子任务个数与最终读取的表个数有关。

数据写入

支持全增量数据实时写入,也支持仅进行增量数据实时同步。全增量Merge分为三个阶段:

  1. 任务配置当天,执行全量数据初始化的离线同步任务。

  2. 任务配置当天,待全量数据初始化完成后,启动实时同步任务,将增量数据实时同步至MaxCompute Log表。

  3. 任务配置第二天,Merge任务将Base表全量数据与实时同步任务的增量数据进行Merge,最后将结果写入Base表。

说明
  • 全量数据初始化完成后,该离线同步任务将会被冻结。

  • 支持写入MaxCompute分区表与非分区表。

以写入分区表为例:

image

注意事项

  • 当整库全增量(准实时)同步至MaxCompute数据源且使用临时AK进行同步时,临时AK超过7天会自动过期,同时,将导致任务运行失败。平台检测到临时AK导致任务失败时会自动重启任务,如果任务配置了该类型的监控报警,您将会收到报警信息。

  • 整库全增量(准实时)至MaxCompute任务配置当天仅能查询历史全量数据,增量数据需要等待第二天Merge完成后才可在MaxCompute查询,详情请参见背景信息中数据写入部分的内容。

  • 整库全增量(准实时)同步任务每天会生成一个全量分区,为避免数据过多占用存储资源,同步任务自动建立的MaxCompute表,默认生命周期为30天。如果时长不满足您的业务需求,可以在配置同步任务时单击对应的MaxCompute表名修改生命周期。详情请参见:四、设置目标表

  • 数据集成使用MaxCompute引擎同步数据通道进行数据上传和下载(同步数据通道SLA详情请参见数据传输服务(上传)场景与工具),请根据MaxCompute引擎同步数据通道SLA评估数据同步业务技术选型。

  • 整库全增量(准实时)同步至MaxCompute,按实例模式同步时,独享数据集成资源组规格最低需要为8C16G、Serverless资源组规格最低需要2 CU。

使用限制

  • 仅支持与当前工作空间同地域的自建MaxCompute数据源,跨地域的MaxCompute项目在测试数据源服务连通性时可以正常连通,但同步任务执行时,在MaxCompute建表阶段会报引擎不存在的错误。

    说明

    使用自建MaxCompute时,DataWorks工作空间的数据开发中仍需要绑定MaxCompute计算资源,否则将无法创建MaxCompute SQL节点,导致全量同步标done节点创建失败。

  • 整库全增量(准实时)同步链路中,创建的离线全量同步子任务需要配置调度资源组,此参数不支持配置公共调度资源组。

  • 暂不支持将源端数据同步至MaxCompute外部表。

计费说明

整库全增量(准实时)同步至MaxCompute的同步链路需要定期做全增量数据周期合并,因此会消耗MaxCompute计算资源。这部分费用由MaxCompute直接收取,费用与用户同步全量数据大小、合并周期正相关。具体费用请参考计费项与计费方式

操作步骤

一、选择同步任务类型

  1. 进入数据集成页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据集成 > 数据集成,在下拉框中选择对应工作空间后单击进入数据集成

  2. 在左侧导航栏单击同步任务,然后在页面顶部单击新建同步任务,进入同步任务的创建页面,配置如下基本信息。

    • 数据来源和去向MySQLMaxCompute

    • 新任务名称:自定义同步任务名称。

    • 同步类型整库全增量(准实时)

二、配置网络连通

  1. 网络与资源配置区域,选择同步任务所使用的资源组。您可以为该任务分配任务资源占用CU数。

  2. 来源数据源选择已添加的MySQL数据源,去向数据源选择已添加的MaxCompute数据源后,单击测试连通性image

  3. 确保来源数据源与去向数据源均连通成功后,单击下一步

三、设置同步来源与规则

  1. 基本配置区域,配置整库全增量(准实时)同步任务的名称、任务存放位置等信息。

  2. 数据来源区域,确认需要同步的源端数据源相关信息。

  3. 选择同步的源表区域,选中需要同步的源端库表,单击图标图标,将其移动至已选库表

    该区域会为您展示所选数据源下所有的表,您可以选择整库全表或部分表进行同步。

  4. 设置表(库)名映射规则区域,单击添加规则,选择相应的规则进行添加。

    同步时默认将源端数据表写入目标端同名表中,如果目标端不存在该表,将会自动创建。同时,您可以通过添加映射规则定义最终写入目的端的表名称。映射规则包括源库名和目标Schema名转换规则源表名和目标表名转换规则目标表名规则

    • 源库名和目标Schema名转换规则:源端库名支持通过正则表达式转换为目标端最终写入的Schema名。

      所有的该转换规则都是针对原始库名的转换,转换完成之后的结果可以使用${db_name_src_transed},在目标表名规则中作为变量来使用。

      示例:将源端doc_前缀的库名替换为pre_前缀。

      image

    • 源表名和目标表名转换规则:源端表名支持通过正则表达式转换为目标端最终写入的表名。

      • 示例1:将源端doc_前缀的表数据,写入前缀为pre_的目标表中。改名

      • 示例2:将多张表数据写入到一张目标表。

        将源端名称为 "table_01","table_02","table_03" 的表同步至一张名为 "my_table" 的表中。配置正则表名转换规则为::table_*,目标:my_table。示例

    • 目标表名规则:支持您使用内置的变量组合生成目标表名,同时,对转换后的目标表名支持添加前缀和后缀。可使用的内置变量有:

      • ${db_table_name_src_transed}源表名和目标表名转换规则中的转换完成之后的表名。

      • ${db_name_src_transed}源库名和目标Schema名转换规则中的转换完成之后的目标Schema名。

      • ${ds_name_src}:源数据源名。

      示例:对上一步源表名和目标表名转换规则转换后的表名做进一步字符串拼接处理,使用${db_table_name_src_transed}代表上一步的处理结果my_table,再为该内置变量增加前缀和后缀,例如,pre_${db_table_name_src_transed}_post,最终就映射到了名为pre_my_table_post的目标表。

  5. 单击下一步,进入设置目标表步骤。

四、设置目标表

  1. 设置写入模式

    目前支持将增量数据实时写入MaxComputeLog表,Log表中的增量数据再定期与目标端Base表全量数据进行合并(Merge),最终将结果写入Base表中。

  2. 时间自动分区设置。

    您可以在时间自动分区设置配置该任务写入MaxCompute分区表非分区表,并定义分区字段的名称。

    说明

    若选择写入分区表,可单击编辑图标定义目标表分区字段名称。

  3. 刷新源表与目标表映射。

    单击刷新源表和MaxCompute表映射将根据您在上一步配置的目标表名映射规则来生成目标表,若上一步中未配置映射规则,将默认写入与源表同名的目标表,若目标端不存在该同名表,将默认新建。同时,您可以修改表建立方式,为目标表在源有表字段基础上增加附加字段。

    说明

    目标表名将根据您在设置表(库)名映射规则阶段配置的表名转换规则自动转换。

    功能

    描述

    设置主键

    当前同步链路不支持无主键表同步。您可以单击同步主键列的编辑按钮,为无主键表设置自选主键,即选择表中一个或部分字段作为主键,写入目标端时将会使用该主键进行去重。

    选择表建立方式

    支持自动建表使用已有表

    • 表建立方式选择使用已有表时,MaxComputeBase 表名列显示已有MaxCompute表。您也可以在下拉列表中选择需要使用的表名称。

    • 表建立方式选择自动建表时,显示自动创建的表名称。您可以单击表名称,查看和修改自动建表中表字段类型、注释以及表生命周期等配置。

    是否全量同步

    您可以在全量同步列选择是否需要在实时同步前先将全量数据同步至目标端。

    如果关闭全量同步,则对应的表将不进行离线全量同步。适用于已经通过其他方式将全量数据同步至目标端的场景。

    为目标字段添加附加字段

    单击操作列的编辑附加字段,可以在源端字段的基础上为目标表增加字段并为字段赋值。支持手动赋值常量与变量。

    说明

    仅在表建立方式自动建表时,可以使用此功能。

    数据集成附加字段支持的变量字段如下:

    EXECUTE_TIME:执行时间
    UPDATE_TIME:更新时间
    DB_NAME_SRC:原始数据库名称
    DB_NAME_SRC_TRANSED:转换后数据库名称
    DATASOURCE_NAME_SRC:源端数据源名称
    DATASOURCE_NAME_DEST:目的端数据源名称
    DB_NAME_DEST:目的端数据库名称
    TABLE_NAME_DEST:目的端表名称
    TABLE_NAME_SRC:源端表名称

    编辑目标表结构

    目前自动建表生成的MaxCompute表生命周期默认只有30天,并且可能存在字段类型映射,即若目标端数据库中没有与源端一致的数据类型时,同步任务在自动创建目标表时,将自动为源端字段匹配目标端可写入的字段类型。若您需要修改MaxCompute表生命周期或修改目标表字段类型映射,您可单击MaxComputeBase 表名列的目标表名进行修改。

    说明

    仅在表建立方式自动建表时,可以使用此功能。

  4. 目标表、字段及数据读取写入关系确认无误后,单击下一步

五:设置表粒度同步规则

部分同步链路支持自定义表级DML处理策略,即当源表发生插入、更新、删除时,您可以在此处定义对应的处理策略。

说明

不同数据源支持的DML操作可能存在差异,具体同步链路是否支持DML处理策略,请以产品界面为准。数据源当前的DML支持情况请参见支持的DMLDDL操作

六、DDL消息处理规则

来源数据源会包含许多DDL操作,您可以根据业务需求,在界面右上方单击DDL能力配置,进入DDL能力配置页面,对不同的DDL消息设置同步至目标端的处理策略。

说明

不同DDL消息处理策略请参见:DDL消息处理规则

七、运行资源设置

当前同步链路创建后将分别生成全量数据离线同步子任务和增量数据实时同步子任务。您需要在运行资源设置步骤配置离线同步任务和实时同步任务的相关属性。

包括实时增量同步及离线全量同步使用的资源组、离线全量同步使用的调度资源组。

说明

DataWorks的离线同步任务通过调度资源组将其下发到数据集成任务执行资源组上执行,所以离线同步任务除了涉及数据集成任务执行资源组外,还会占用调度资源组资源,将会产生调度实例费用。

八、执行同步任务

  1. 完成所有配置后,单击页面底部的完成配置

  2. 数据集成 > 同步任务界面,找到已创建的同步任务,单击操作列的提交执行

  3. 单击任务列表中对应任务的名称/ID,查看任务的详细执行过程。

    image

后续步骤

完成任务配置后,您可以对已创建的任务进行管理、执行加减表操作,或对任务配置监控报警,并查看任务运行的关键指标等。详情请参见:全增量同步任务运维

附:Base表数据未产出排查思路

Merge流程

image

现象

原因

解决方案

增量LogT-1分区数据产出检查失败。

实时同步任务执行异常,导致增量LogT-1分区数据未正常产出。

  • 检查实时同步任务失败原因,并从失败位点重启该任务。

    说明

    RDS Binlog保留时长有限制,若对应时间点Binlog被清理,实时同步将会报错位点找不到。

  • 为实时同步子任务设置监控报警。

目标端BaseT-2分区数据产出检查失败。

  1. 前一天Merge任务执行失败。

  2. Base表前一天分区被删除。