MySQL分库分表同步至MaxCompute

数据集成目前支持将MySQL、PolarDB等源头的分库分表数据实时同步至MaxCompute。本文以MySQL分库分表实时写入MaxCompute场景为例,为您介绍如何通过数据集成同步分库分表数据至MaxCompute。

背景信息

实际业务场景下数据同步通常不能通过一个或多个简单离线同步或者实时同步任务完成,而是由多个离线同步、实时同步和数据处理等任务组合完成,这就会导致数据同步场景下的配置复杂度非常高。尤其是在MySQL分库分表的场景下,上游的数据库和表非常多,都需要同时写入一张MaxCompute表,如果同时配置多个任务会导致配置非常复杂且运维困难。

针对以上痛点,DataWorks数据集成一键同步解决方案提供了面向业务场景的同步任务配置化方案,支持不同数据源的一键同步功能,方便业务简单快速的进行数据同步。

分库分表同步至MaxCompute解决方案是一种基于Binlog实时同步、T+1合并生成离线表的实时同步解决方案。实时同步数据写入Log表中,Base表每一个天分区存储全量数据。然后每天运行合并任务合并前一天的Base表分区、Log表实时数据,产出新的全量分区,在查询数据时,一般需要查询Base表最新分区。

前提条件

使用限制

  • 该同步链路暂不支持跨时区同步数据。如果同步任务中同步的数据源与使用的DataWorks资源组不在同一个时区,则会导致同步的数据有误。

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

操作步骤

一、选择同步任务类型

  1. 进入数据集成页面。

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

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

    • 数据来源和去向MySQLMaxCompute

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

    • 同步类型分库分表实时同步至MaxCompute

二、网络与资源配置

  1. 网络与资源配置区域,选择同步任务所使用数据来源(分库分表拆分的多个数据源)、资源组数据去向(MaxCompute)。然后单击测试所有连通性

    image

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

三、基本配置

您可以自定义同步任务方案名称责任人目标任务存放位置,单击下一步,进入分库源表配置步骤。

当勾选自动建立工作流程时,系统将自动在工作空间建立一个业务流程,命名方式为"oneclick"+"源端数据源名称"+"to"+"目标数据源名称"。

四、分库源表配置

分库分表同步链路的最小单位是逻辑表,一个逻辑表对应一套物理库表规则、一个目标base表。自动生成逻辑表的功能,可以大大简化逻辑表的配置步骤,一般情况下,我们都可以使用自动生成逻辑表来扫描源端数据源,简化大部分配置操作。如果自动扫描的结果不符合预期,只需要对自动扫描的结果做简单修正即可。复杂的物理库表规则可以使用手动添加逻辑表功能实现。

自动生成逻辑表

  1. 单击自动生成逻辑表,在数据源列表中选择部分数据源,用作生成逻辑表的扫描数据源。

    image

  2. 配置逻辑表生成规则区域,单击新增规则,您可以选择预置规则手动输入相应的规则进行添加。

    image

  3. 单击开始执行

  4. 等待合并完成后,单击下一步,进入设置目标表步骤。

手工添加逻辑表

自动生成逻辑表与期望的匹配结果不符时,可以编辑逻辑表匹配规则,也可以通过手工添加逻辑表添加没有扫描到的逻辑表。

  1. 单击手工添加逻辑表,有几个逻辑表需要同步,就在此处添加几个。同一逻辑表的数据会同步到目标表中。

  2. 设置源库或源表限定条件。

    每一个同步表的限定条件分为库限定条件和表限定条件,您可以在源表选择限定条件源库选择限定条件区域单击添加条件分别添加限定条件,同步任务执行时将依据此规则对于源库和源表进行搜索整合,作为目标表的分库分表来源。

  3. 单击应用

批量编辑库规则

分库规则可以限定来源库条件,这个限定条件可以被应用到所有的同步表。

image例如,数据都来自xiaobo1/xiaobo2/xiaobo3等数据库,那么就可以添加下图所示的分库规则限定条件:

image

五、设置目标表

  1. 设置写入模式

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

  2. 时间自动分区设置。

    您可以在时间自动分区设置配置该任务写入MaxCompute分区表或是非分区表,并定义分区字段的名称,本案例中选择写入分区表,分区字段为ds

    说明

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

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

    单击刷新源表和MaxCompute表映射映射出现目标表列表。

    功能

    描述

    为非主键表选择主键

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

    本案例为无主键表选择id列承担主键作用。

    编辑目标表结构

    单击MaxCompute表名,可以预览MaxCompute表结构,在创建MaxCompute表时,数据集成会给MaxCompute自动加上一列 _src_info_用于标识这行数据来自哪个子表。_src_info_配合源表主键,也可以用于唯一定位一行数据。

    说明

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

    选择表建立方式

    支持自动建表使用已有表

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

    • 表建立方式选择自动建表时,显示自动创建的表名称。您可以单击表名称,查看和修改建表语句。

    本案例选择自动建表

    是否全量同步

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

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

    本案例开启所有表的全量同步。

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

六、设置表粒度同步规则

MySQL分库分表同步至MaxCompute支持配置DML同步规则。例如,当您需要在离线表里保留源库删除的数据,您可以这样配置:image即当源表发生插入、更新、删除时,您可以在此处定义对应的处理策略。

  • 正常处理:源端DML消息将会继续下发给目标数据源,由目标数据源来处理。

  • 忽略:直接丢弃该消息,不再向目标数据源发送对应的DML消息,对应数据不会改变。

  • 有条件的正常处理:选择后,您可以配置过滤条件,同步任务将按照您配置的过滤表达式对源端数据进行过滤,满足过滤条件的数据会被正常处理,不满足的会被忽略掉。

说明

若不设置,则默认为“正常处理”。

单击下一步进入DDL消息处理规则步骤。

七、设置DDL消息处理规则

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

说明

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

单击下一步进入运行资源设置步骤。

八、运行资源设置

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

包括实时增量同步及离线全量同步使用的资源组、离线全量同步使用的调度资源组,同时,单击高级配置可配置子查询失败时是否重试等参数。

说明

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

九、执行同步任务

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

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

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

    image

后续步骤

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