MySQL整库全增量同步至MaxCompute

更新时间:
复制为 MD 格式

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

工作原理

整库全增量同步任务通过统一的流程,实现全量数据的首次迁移和增量数据的持续同步。任务启动后,系统会自动创建并协调离线和实时子任务,将数据合并写入目标表(Base表)。

核心流程包括三个阶段:

  1. 全量初始化:任务启动后,首先执行离线同步任务,将源端数据库中所有表的表结构和存量数据一次性迁移到 MaxCompute 的目标 Base 表中。全量数据初始化完成后,该离线同步任务将被冻结。

  2. 增量数据同步:全量迁移完成后,系统启动实时同步任务,持续捕获源端数据库(例如通过 MySQL Binlog)的增量变更数据(Insert、Update、Delete),并将其准实时地写入 MaxCompute 的临时 Log 表中。

  3. 周期性合并(Merge):系统每日(T+1)自动执行 Merge 任务,将前一天(T日)积累在 Log 表中的增量数据与 Base 表中的全量数据进行合并,最终生成 T 日最新的全量快照数据,并写入 Base 表的新分区。该合并任务每日执行一次。

以写入分区表为例,数据流转过程如下:

image

该同步任务具有以下特性:

  • 多表到多表/单表:支持将源端多表同步到目标端对应的多表,也支持通过映射规则将多张源表的数据合并写入目标端单表。

  • 任务组成:一个整库同步任务由用于全量初始化的离线同步子任务和用于增量同步的实时同步子任务构成以及用于合并数据的Merge任务组成。

  • 目标表支持:支持将数据写入 MaxCompute 的分区表和非分区表。

适用范围

  • 资源要求:执行任务需要使用Serverless资源组。当按实例模式同步时,资源规格最低要求为:独享数据集成资源组8C16G,Serverless资源组2 CU。

  • 网络连通:需确保数据集成资源组与源端(如MySQL)、目标端(如MaxCompute)数据源网络连通。详情参见网络连通方案概述

  • 地域限制:仅支持同步至与当前 DataWorks 工作空间同地域的自建 MaxCompute 数据源。使用自建MaxCompute数据源时,DataWorks工作空间的数据开发中仍需要绑定MaxCompute计算资源,否则将无法创建MaxCompute SQL节点,导致全量同步done节点创建失败。

  • 调度资源组限制:使用任务配置的Serverless资源组作为调度资源组。

  • 目标表类型限制:不支持将源端数据同步至 MaxCompute 外部表。

注意事项

  • 主键要求:不支持同步无主键表。对于无主键的表,必须在配置时手动指定一个或多个列作为业务主键(自选主键)。

  • 数据可见性延迟:整库全增量至MaxCompute任务配置当天仅能查询历史全量数据,增量数据需要等待第二天Merge完成后才可在MaxCompute查询,详情请参见工作原理中数据写入部分的内容。

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

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

  • Binlog保留策略:实时同步依赖源端 MySQL 的 Binlog。需确保 Binlog 的保留时长足够,以防因任务长时间暂停或失败重试时找不到起始位点,导致同步中断。

计费说明

  • 整库全增量任务包括全量阶段的离线同步任务,增量阶段的实时同步任务以及周期Merge阶段的周期任务,此三个阶段的任务将分别计费:其中三个阶段都会使用资源组的CU,计费方式参见:Serverless资源组计费,周期任务还会产生任务调度费用,详情参见:调度实例数费用

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

操作步骤

一、选择同步任务类型

  1. 进入数据集成页面。

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

  2. 在左侧导航栏单击同步任务,然后在页面顶部单击新建同步任务,在创建同步任务的弹窗中填写以下关键信息:

    • 数据来源类型MySQL

    • 数据去向类型MaxCompute

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

    • 任务类型整库全增量

    • 同步步骤结构迁移增量同步全量同步周期Merge

二、配置数据源与资源组

  1. 来源数据源选择已添加的MySQL数据源,去向数据源选择已添加的MaxCompute数据源。

  2. 运行资源区域,选择同步任务所使用的资源组,并为该任务分配资源组CU。支持为全量同步和增量同步分别设置CU,以精确控制资源,避免浪费。

    说明

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

  3. 并确保来源数据源与去向数据源均通过连通性检查

三、选择要同步的库表

此步骤中,您可以在源端库表区域选择源端数据源下需要同步的表,并单击image图标,将其移动至右侧已选库表

image

若库表数较多,可以使用库过滤或者表过滤,或通过配置正则表达式来选择需要同步的表。

四、任务相关配置

  • Log表时间范围:此参数定义了从日志表(Log Table)向目标分区合并数据时的时间查询范围。

    为避免因数据延迟导致的跨天分区错误,请适当延长此范围,以确保所有属于该分区的数据都能被正确合并。

  • Merge任务调度配置:设置每日Merge任务的调度时间。调度时间设置方式可参见:调度时间

  • 周期调度参数:设置调度参数,调度参数可在后续的分区设置中对分区进行赋值,满足按日期写入分区的需求。

  • 表分区设置:为目标表设置分区,可设置分区列名、赋值方式等关键参数,其中赋值列可通过使用调度参数来满足按日期自动生成分区的场景。

五、目标表映射

在此步骤,您需要定义源表与目标表的映射规则,并指定主键、动态分区、DDL/DML配置等规则,以确定数据写入方式。

操作

说明

刷新映射

系统会自动列出您选择的源端表,但目标表的具体属性需要您刷新确认后才能生效。

  • 批量选中需要同步的表,单击批量刷新映射。

  • 目标表名:目标表名将根据目标表名映射自定义规则自动生成。默认为 ${源端库名}_${表名},如果目标端不存在此同名表,系统将自动为您创建。

目标表名映射自定义(可选)

系统存在默认的表名生成规则:${源端库名}_${表名}。您也可以在目标表名映射自定义列,单击编辑按钮,新增自定义目标表名规则。

  • 规则名称:定义规则名称,建议为规则配置一个具有明确业务意义的名称。

  • 目标表名:目标表名可以通过单击image按钮,选择手动输入内置变量进行拼接,生成目标表名。其中变量支持源端数据源名,源端数据库名和源端表名。

  • 编辑内置变量:内置变量可以在原有的基础上进行字符串转换。

可实现如下场景:

  1. 名添加前后缀:通过设置常量在源端表名的基础上,添加前缀或者后缀。

    规则配置

    应用效果

    image

    image

  2. 字符串统一替换:将源端表名的字符串dev_,统一替换为prd_

    规则配置

    应用效果

    image

    image

  3. 多张表写入一张表。

    规则配置

    应用效果

    image

    image

编辑字段类型映射(可选)

系统存在默认的源端字段类型与目标端字段类型映射,您可以单击表格右上角的编辑字段类型映射,自定义源端表与目标端表字段类型映射关系,配置完成后单击应用并刷新映射

编辑字段类型映射时,需要注意字段类型转换规则是否正确,否则会导致类型转换失败而产生脏数据,影响任务运行。

编辑目标表结构(可选)

系统会根据自定义的表名映射规则,自动创建尚不存在的目标表,或复用已存在的同名表。

DataWorks将基于源端表结构自动生成目标表结构,常规场景下无需人工干预。您也可以通过以下方式,修改表的表结构:

  • 单表新增字段:单击目标表名列的image.png按钮添加字段。

  • 批量新增字段:选中待同步的所有表,在表格底部选择批量修改 > 目标表结构-批量修改和新增字段

  • 不支持重命名列名。

已存在的表仅支持添加字段;新建表添加字段、分区字段,设置表类型或表属性等。详见界面开放编辑区域。

目标表字段赋值

原生字段会根据源端表和目标表的同名字段进行自动映射,上述步骤中的新增字段需要手动赋值。操作如下:

  • 单表赋值:单击目标表字段赋值列的配置按钮,为目标表字段赋值。

  • 批量赋值:在列表底部选择批量修改 > 目标表字段赋值为目标表中相同的字段进行批量赋值。

在赋值时支持赋值常量与变量,可在赋值方式中进行切换类型,支持方式如下:

  • 表字段

    • 手动赋值:直接输入常量值或者调度参数,如:abc${bizdate}

    • 选择变量:选择系统提供变量作为字段值,变量类型参见界面描述。

    • 来源字段:将源端表字段的值作为字段的值,其中取值类型可选字段值或者时间值。

      • 字段值:若源端字段为非时间类型,可以直接将源端字段值写入目标端字段。

      • 时间值:若来源字段中的值为时间,可根据不同的格式进行相应处理,并指定目标格式对分取值进行格式化。

        • 时间字符串:表示时间的字符串,如:2018-10-23 02:13:562021/05/18。通过指定源端和目标端的时间格式的方式将其序列化为时间。如上文举例的字符串,可以使用yyyy-MM-dd HH:mm:ssyyyy/MM/dd的格式进行序列化来识别。

        • 时间对象:如果来源值本身是DateDatetime这种时间类型的格式,请直接选择该类型。

        • Unix时间戳(秒):秒级别时间戳,也支持符合10位时间戳格式的数字或字符串,比如1610529203“1610529203”

        • Unix时间戳(毫秒):毫秒级别时间戳,也支持符合13位时间戳格式的数字或字符串,比如1610529203002“1610529203002”

    • 函数:支持通过函数对来源字段进行简单变换后作为分区值。使用方式详见:使用函数表达式为目标表字段赋值

  • 分区字段:支持按照来源字段的枚举值或者事件时间作为分区值动态创建分区。

    • 手动赋值:支持输入常量值或在周期调度参数配置中已设置的调度参数,如:abc${bizdate}

设置源端切分列

您可以在源端切分列中下拉选择源端表中的字段或选择不切分。同步任务执行时将根据该字段切分为多个task,以便并发、分批读取数据。

推荐使用表主键等数据分布均匀的字段,作为源端切分列,不支持字符串、浮点和日期等其他类型。

目前仅源端为MySQL时支持源端切分列。

是否跳过全量同步

若已在步骤三配置全量同步,可以单独取消同步某个表的全量数据同步。适用于已经通过其他方式将全量数据同步至目标端的场景。

全量条件

在全量阶段对源端进行条件过滤。此处只需写where子句,不需要写出where关键字。

DML规则配置

DML消息处理用于在实时同步数据写入目标端之前,对源端捕获的变更数据(InsertUpdateDelete)进行精细化的过滤与控制,此规则仅在增量阶段生效。

全量合并周期

当前只支持按天合并。可以在自定义合并时间中配置merge任务的具体调度时间。

合并主键

可以通过选择表中的一列或多列来定义主键。

  • 单列主键:选择本身具有唯一值的单列(如 id)作为主键。

  • 组合主键:若无唯一单列,可选择多个列组合。此时,这些列的值组合必须能唯一标识每一行数据,以确保数据写入时的唯一性,防止覆盖。

六、DDL能力配置

实时同步部分链路可以感知源端表结构的元数据变更,并且通知目标端,使目标端同步更新,或采取其他诸如告警、忽略或终止运行等处理策略。

您可以单击界面右上角的DDL能力配置,针对每一种变更类型设置对应的处理策略,不同的通道支持的处理策略不同。

  • 正常处理:由目标端处理源端的DDL变更信息。

  • 忽略:忽略变更消息,目标端不做修改。

  • 出错:终止整库实时同步任务,状态置为出错

  • 告警:当源端出现此类变更时,向用户告警。需在报警配置中配置DDL通知规则。

说明

当源端新增列并通过DDL同步在目标端也创建了该列后,系统不会对目标表中的存量数据进行数据回填。

七、高级配置参数

如果需要对任务做精细化配置,达到自定义同步需求,可以单击自定义高级参数列的配置,修改高级参数。

  1. 单击界面右上方的高级参数配置,进入高级参数配置页面。

  2. 根据参数提示,修改参数值,参数含义见参数名称后的解释。

重要

请在完全明白对应参数的含义情况下再进行修改,避免产生任务延时、资源占用过大导致阻塞其他任务、数据丢失等不可预料的问题。

八、执行同步任务

  1. 完成所有配置后,单击保存完成配置,保存任务。

  2. 数据集成 > 同步任务界面,找到已创建的同步任务,单击操作列的发布。发布时若勾选发布后直接启动运行,则单击确认后,任务会立即执行,否则需要手动启动。

    说明

    数据集成的任务需要发布至生产环境运行,因此新建或者编辑任务均需执行发布操作后方可生效。

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

后续步骤

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

常见问题

Q: 为什么 Base 表数据未按预期更新数据?

A:以下为原因分析和解决方案:

image

现象

原因

解决方案

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

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

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

    说明

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

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

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

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

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

  • Merge节点配置运行状态监控,详情请参见:规则管理

  • 若误删除BaseT-2分区,请通过补数据功能将其补齐,补齐后,再重新运行Merge节点。详情请参见:补数据实例运维