MySQL一键实时同步至MaxCompute

本文为您介绍如何通过DataWorks数据集成将MySQL全增量数据一体化同步至MaxCompute表中。

前提条件

  • 已完成MaxCompute和MySql数据源配置。您需要将数据库添加至DataWorks上,以便在同步任务配置时,可通过选择数据源名称来控制同步读取和写入的数据库。本实践中创建的数据源名为doc_mysql1,详情请参见配置MySQL数据源配置MaxCompute数据源

    说明

    数据源相关能力介绍详情请参见:数据源概述

  • 已购买合适规格的独享数据集成资源组。详情请参见:新增和使用独享数据集成资源组

  • 已完成独享数据集成资源组与数据源的网络连通。详情请参见:网络连通方案

  • 已完成数据源环境准备。

    • MaxCompute:Decimal类型为MaxCompute 2.0支持的数据类型,所以在同步前,您需要先开启MaxCompute2.0数据类型。详情请参见2.0数据类型版本

    • MySQL:来源数据源为MySQL时,您需要开启Binlog相关功能,详情请参见MySQL环境准备

需求分析

  • 数据:将MySQL全量数据一次性同步至MaxCompute,增量数据实时同步MaxCompute Log表,全增量数据定时Merge。

  • 表:将源端所有doc_前缀的表名,在写入目标端时统一更新为ods_前缀。

  • 字段:目标表在原有表结构基础上,增加execute_time字段用于记录源端表某个记录发生变更的时间。

综合如上分析结果,最终的表对应关系如下所示:

源端数据库

源端待同步表

写入的目标表

目标表新增字段

doc_demo1

doc_tb1

ods_tb1

execute_time

doc_tb2_nopk

ods_tb2_nopk

操作流程

  1. 创建同步任务

    1. 步骤一:选择同步方案

    2. 步骤二:配置网络连通

    3. 步骤三:设置同步来源与规则

    4. 步骤四:设置目标表

    5. 步骤五:DDL消息处理策略

    6. 步骤六:设置任务运行资源

  2. 执行同步任务

  3. 同步任务运维

创建同步任务

  1. 选择同步方案。

    创建同步解决方案任务,选择需要同步的源端数据源MySQL,目标端数据源MaxCompute,并选择一键实时同步至MaxCompute方案。

  2. 配置网络连通。

    源端选择已创建的数据源doc_mysql1,目标数据源为DataWorks工作空间创建的MaxCompute数据源,并测试连通性。

  3. 设置同步来源与规则。

    1. 基本配置区域,配置同步解决方案的名称、任务存放位置等信息。

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

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

      本案例中选择doc_demo1下的表doc_tb1doc_tb2_nopk

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

      同步时默认将源端数据表写入目标端同名表中,您可以通过添加映射规则定义最终写入目的端的表名称。本案例通过源表名和目标表名转换规则,将源端doc_前缀的表在写入目标端时替换为ods_前缀。mysql2odps

  4. 设置目标表。

    1. 设置写入模式

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

    2. 时间自动分区设置。

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

      说明

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

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

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

      说明

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

      功能

      描述

      为非主键表选择主键

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

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

      选择表建立方式

      支持自动建表使用已有表

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

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

      本案例选择自动建表

      是否全量同步

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

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

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

      为目标字段添加附加字段

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

      说明

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

      本案例新增字段execute_time并为字段赋值变量_execute_time_,用于记录操作的执行时间。附加字段

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

  5. 表粒度同步规则设置。

    对目标表进行单独配置DML和批量配置DML规则,配置项有插入(INSERT)更新(UPDATE)和删除(DELETE)。可配置的策略如下:

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

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

    • 有条件的正常处理:按过滤表达式进行条件过滤,满足过滤条件的数据会被正常处理,不满足的会被忽略掉。

    • 如不设置,则默认为正常处理

    说明

    修改DML为非正常处理时,将导致源端和目标端数据不一致。

  6. DDL消息处理策略。

    来源数据源会包含许多DDL操作,数据集成体提供默认处理策略,您也可以根据业务需求,对不同的DDL消息设置同步至目标端的处理策略。不同DDL消息处理策略请参见:DDL消息处理规则

    本方案使用默认处理规则。

  7. 设置任务运行资源。

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

    包括实时增量同步及离线全量同步使用的独享数据集成资源组、离线全量同步使用的调度资源组,同时,单击高级配置可配置是否容忍脏数据、任务最大并发数、源库允许支持的最大连接数等参数。

    说明
    • DataWorks的离线同步任务通过调度资源组将其下发到数据集成任务执行资源组上执行,所以离线同步任务除了涉及数据集成任务执行资源组外,还会占用调度资源组资源。如果使用了独享调度资源组,将会产生调度实例费用。您可通过任务下发机制对该机制进行了解。

    • 离线和实时同步任务推荐使用不同的资源组,以便任务分开执行。如果选择同一个资源组,任务混跑会带来资源抢占、运行态互相影响等问题。例如,CPU、内存、网络等互相影响,可能会导致离线任务变慢或实时任务延迟等问题,甚至在资源不足的极端情况下,可能会出现任务被OOM KILLER杀掉等问题。

执行同步任务

  1. 提交并发布任务。

  2. 单击左上角的image后,选择全部产品 > 运维中心(工作流)进入运维中心页面。

  3. 在运维中心的左边菜单内单击进入实时任务运维 > 实时同步任务页面,对已发布的实时任务在操作栏里单击提交即可。

说明

您可重点关注以下步骤中创建的表及节点任务名称以便进行后续运维。例如,创建MaxCompute Log表、创建MaxCompute Base表、创建数据集成实时同步任务、提交发布增全量Merge Into节点。

同步任务运维

同步至MaxCompute全增量Merge分为3个阶段:

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

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

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

为避免上述阶段出现异常导致数据未产出,我们需要分别为实时同步子任务及Merge节点进行监控。

  1. 实时同步报警配置。

    1. 进入实时任务运维页面

    2. 找到已创建的实时同步任务,单击操作列的报警设置,进入报警设置页面。

    3. 在报警设置页面,选择报警规则>新建规则

      配置监控指标为任务状态,阈值5分钟,即当任务5分钟内无心跳时触发报警,其他配置项可根据需要进行配置,确认无误后,单击确定。详情请参见:同步任务相关操作

  2. Merge节点监控报警配置。

    为避免全增量数据合并期间出现错误,影响Base表数据产出,建议您通过规则管理为该Merge节点设置监控报警。

    1. 在同步任务执行详情页面获取到Merge任务名称。详情请参见:查看任务执行详情

    2. 进入规则管理界面,单击新建自定义规则,详情请参见:规则管理

      在创建自定义规则页面,选择规则对象为该任务产生的Merge节点,并设置触发条件出错,其他配置项可根据您业务进行配置。

附:查询数据

由于目前全增量Merge周期为一天,所以任务配置当天,我们只能在目标表查询到同步的全量数据,待第二天后,可查询到全增量Merge后的数据。

查看全量数据写入情况

在数据开发界面找到ODPS SQL节点,通过命令查询表数据,查询数据前请先在数据集成>任务运维界面确认执行步骤中,启动全量数据初始化同步任务运行步骤已执行成功。创建ODPS SQL临时查询节点,详情请参见创建临时查询查询数据

查看实时同步的增量Log表数据

  • 数据集成>同步任务>执行详情,查看创建MaxCompute Log表阶段创建的Log表名称。

  • 在数据开发界面找到ODPS SQL节点,通过命令查询表数据,创建ODPS SQL临时查询节点,详情请参见创建临时查询

    说明

    增量Log表的数据格式说明请参见实时同步字段格式