本文介绍如何使用数据传输服务(Data Transmission Service,简称DTS),将RDS for MySQL同步至DataHub,可用于流计算等大数据产品对数据进行实时分析等场景。

源库支持的实例类型

执行数据同步操作的MySQL数据库支持以下实例类型:

  • 有公网IP的自建数据库
  • ECS上的自建数据库
  • 通过专线/VPN网关/智能网关接入的自建数据库
  • 同一或不同云账号下的RDS for MySQL实例
本文以RDS for MySQL实例为例介绍配置流程,当源库为其他实例类型时,配置流程与该案例类似。
说明 如果源库为自建MySQL数据库,您还需要对源库进行配置,详情请参见为自建MySQL创建账号并设置binlog

前提条件

  • DataHub实例的地域为华东1、华东2、华北2或华南1。
  • DataHub实例中,已创建用作接收同步数据的Project,详情请参见创建Project

功能限制

  • 不支持全量数据初始化,即DTS不会将源RDS实例中同步对象的存量数据同步至目标DataHub实例中。
  • 仅支持表级别的数据同步。
  • 不支持新增列的数据同步,即源数据表新增了某个列,该列的数据不会同步至目标DataHub实例中。

注意事项

  • 如果同步对象为单个或多个表(非整库),那么在数据同步时,请勿对源库的同步对象使用gh-ost或pt-online-schema-change等类似工具执行在线DDL变更,否则会导致同步失败。
  • 如果源数据库没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。

操作步骤

  1. 购买数据同步作业,详情请参见购买流程
    说明 购买时,选择源实例为MySQL,选择目标实例为DataHub
  2. 登录数据传输控制台
  3. 在左侧导航栏,单击数据同步
  4. 同步作业列表页面顶部,选择数据同步实例所属地域。选择地域
  5. 定位至已购买的数据同步实例,单击配置同步链路
  6. 配置同步通道的源实例及目标实例信息。DataHub同步源目信息配置
    配置项目 配置选项 配置说明
    任务名称 -
    • DTS为每个任务自动生成一个任务名称,任务名称没有唯一性要求。
    • 您可以根据需要修改任务名称,建议为任务配置具有业务意义的名称,便于后续的任务识别。
    源实例信息 实例类型 选择RDS实例
    实例地区 购买数据同步实例时选择的源实例地域信息,不可变更。
    实例ID 选择作为数据同步源的RDS实例ID。
    数据库账号 填入源RDS的数据库账号。
    说明 当源RDS实例的数据库类型为MySQL 5.5MySQL 5.6时,无需配置数据库账号数据库密码
    数据库密码 填入数据库账号对应的密码。
    连接方式 根据需求选择为非加密连接SSL安全连接,本案例选择为非加密连接
    说明 选择 SSL安全连接时,需要提前开启RDS实例的SSL加密功能,详情请参见设置SSL加密
    目标实例信息 实例类型 固定为DataHub,不可变更。
    实例地区 购买数据同步实例时选择的目标实例地域信息,不可变更。
    Project 选择DataHub实例的Project
  7. 单击页面右下角的授权白名单并进入下一步
    说明 此步骤会将DTS服务器的IP地址自动添加到目标RDS实例的白名单中,用于保障DTS服务器能够正常连接源RDS实例和目标DataHub实例。
  8. 配置同步策略及对象信息。配置同步对象
    配置项目 配置说明
    同步初始化 勾选结构初始化
    说明 勾选结构初始化后,在数据同步作业的初始化阶段,DTS会将同步对象的结构信息(例如表结构)同步至目标DataHub实例。
    选择同步对象

    源库对象框中单击待迁移的对象,然后单击向右小箭头将其移动至已选择对象框。

    说明
    • 同步对象的选择粒度为表。
    • 默认情况下,同步对象的名称保持不变。如果您需要同步对象在目标实例上名称不同,那么需要使用DTS提供的对象名映射功能,详情请参见设置同步对象在目标实例中的名称
  9. 上述配置完成后,单击页面右下角的预检查并启动
    说明
    • 在数据同步作业正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动数据同步作业。
    • 如果预检查失败,单击具体检查项后的,查看失败详情。根据提示修复后,重新进行预检查。
  10. 预检查对话框中显示预检查通过后,关闭预检查对话框,同步作业将正式开始。
  11. 等待该同步作业的链路初始化完成,直至处于同步中状态。
    您可以在 数据同步页面,查看数据同步作业的状态。

Topic结构定义说明

DTS在将RDS for MySQL产生的增量数据,同步至DataHub实例的Topic时,Topic中除了存储更新的数据,还会存储一些元信息,示例如下。

dts_record_id dts_instance_id dts_db_name dts_table_name dts_operation_flag dts_utc_timestamp dts_before_flag dts_after_flag dts_col1 dts_colN
1 234 db1 sbtest1 I 1476258462 N Y 1 JustInsert
2 234 db1 sbtest1 U 1476258463 Y N 1 JustUpdate
2 234 db1 sbtest1 U 1476258463 N Y 1 JustUpdate
3 234 db1 sbtest1 D 1476258464 Y N 1 JustDelete

结构定义说明

字段 说明
dts_record_id 增量日志的记录id,为该日志唯一标识。
说明
  • id的值唯一且递增。
  • 如果增量日志的操作类型为UPDATE,那么增量更新会被拆分成两条记录,一条为DELETE,一条为INSERT,并且这两条记录的dts_record_id的值相同。
dts_instance_id 数据库的server id。
dts_db_name 数据库名称。
dts_table_name 表名。
dts_operation_flag 操作类型,取值:
  • I:INSERT操作。
  • D:DELETE操作。
  • U:UPDATE操作。
dts_utc_timestamp 操作时间戳,即binlog的时间戳(UTC 时间)。
dts_before_flag 所有列的值是否更新前的值,取值:Y或N。
dts_after_flag 所有列的值是否更新后的值,取值:Y或N。

关于dts_before_flag和dts_after_flag的补充说明

对于不同的操作类型,增量日志中的dts_before_flagdts_after_flag定义如下:

  • INSERT

    当操作类型为INSERT时,所有列的值为新插入的记录值,即为更新后的值,所以before_flag取值为N,after_flag取值为Y,示例如下。

    dts_record_id dts_instance_id dts_db_name dts_table_name dts_operation_flag dts_utc_timestamp dts_before_flag dts_after_flag dts_col1 …. dts_colN
    1 234 db1 sbtest1 I 1476258462 N Y 1 ….. JustInsert
  • UPDATE

    当操作类型为UPDATE时,DTS会将UPDATE操作拆为两条增量日志。这两条增量日志的dts_record_id、dts_operation_flag及 dts_utc_timestamp对应的值相同。

    第一条增量日志记录了更新前的值,所以dts_before_flag取值为Y,dts_after_flag取值为N。第二条增量日志记录了更新后的值,所以 dts_before_flag取值为N,dts_after_flag取值为Y,示例如下。

    dts_record_id dts_instance_id dts_db_name dts_table_name dts_operation_flag dts_utc_timestamp dts_before_flag dts_after_flag dts_col1 …. dts_colN
    2 234 db1 sbtest1 I 1476258463 Y N 1 ….. JustInsert
    2 234 db1 sbtest1 I 1476258463 N Y 1 ….. JustUpdate
  • DELETE

    当操作类型为DELETE时,增量日志中所有的列值为被删除的值,即列值不变,所以dts_before_flag取值为Y, dts_after_flag取值为N,示例如下。

    dts_record_id dts_instance_id dts_db_name dts_table_name dts_operation_flag dts_utc_timestamp dts_before_flag dts_after_flag dts_col1 …. dts_colN
    3 234 db1 sbtest1 D 1476258464 Y N 1 ….. JustDelete

后续操作

配置完数据同步作业后,您可以对同步到DataHub实例中的数据进行计算分析。更多详情,请参见阿里云实时计算