表格存储(Tablestore)是阿里云自研的多模型结构化数据存储,提供海量结构化数据存储以及快速的查询和分析服务。通过数据传输服务DTS(Data Transmission Service),您可以将MySQL数据库(例如自建MySQL或RDS MySQL)同步至Tablestore实例,帮助您轻松实现数据的流转。

前提条件

已创建目标表格存储(Tablestore)实例,详情请参见创建表格存储实例

注意事项

  • DTS在执行全量数据初始化时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,您需要在执行数据同步前评估数据同步对源库和目标库性能的影响,同时建议您在业务低峰期执行数据同步。
  • 不支持同步DDL操作。如果同步过程中执行了DDL操作,您需要先移除同步对象,然后在Tablestore实例中删除该表,最后新增同步对象
  • 待同步的表数量符合Tablestore实例的限制(不超过64个)。如业务确实会超过此限制,请为目标Tablestore实例提交工单放开此限制。
  • 待同步的表或列名称符合Tablestore实例的命名规范:
    • 表或列的名称由大小写字母、数字或下划线(_)组成,且只能以字母或下划线开头。
    • 表或列的名称长度为1~255个字符。

同步初始化类型说明

同步初始化类型 说明
结构初始化 DTS将源库中待同步对象的结构定义信息同步至目标库,目前支持的对象为表。
警告 此场景属于异构数据库间的数据同步,DTS在执行结构初始化时数据类型无法完全对应,请谨慎评估数据类型的映射关系对业务的影响,详情请参见结构初始化涉及的数据类型映射关系
全量数据初始化 DTS将源库中待同步对象的存量数据,全部同步到目标库中,作为后续增量同步数据的基线数据。
增量数据初始化 DTS在全量数据初始化的基础上,将源库的增量更新数据实时同步至目标库。

在增量数据初始化阶段,DTS支持同步的SQL语句为INSERT、UPDATE、DELETE。

警告 请勿在源库执行DDL语句,否则将导致数据同步失败。

准备工作

注意 由于在配置目标库时需要填写访问密钥AccessKey(AK)信息来执行授权,为避免主账号泄露AccessKey带来的安全风险,建议您通过RAM用户来完成授权和AccessKey的创建。
  1. 创建RAM用户并授予其AliyunOTSFullAccess权限(管理表格存储服务的权限)。
    1. 登录RAM控制台
    2. 创建RAM用户
    3. 在左侧导航栏的人员管理菜单下,单击用户
    4. 找到目标RAM用户,单击其操作列的添加权限
      添加授权
    5. 在对话框的文本框中输入AliyunOTSFullAccess,然后单击选择搜索结果中的权限策略名称。
      授予AliyunOTSFullAccess权限
    6. 单击确定
    7. 单击完成
  2. 为RAM用户创建访问密钥AccessKey(AK),详情请参见创建AccessKey
  3. 可选:如需使用RAM用户配置数据同步作业,您还需要为该用户授予AliyunDTSDefaultRole权限,详情请参见子账号授权步骤
    说明 如果使用主账号配置数据同步作业,无需执行本步骤。

操作步骤

  1. 购买数据同步作业,详情请参见购买流程
    说明 购买时,选择源实例为MySQL,目标实例为Tablestore,并选择同步拓扑为单向同步
  2. 登录数据传输控制台
  3. 在左侧导航栏,单击数据同步
  4. 同步作业列表页面顶部,选择同步的目标实例所属地域。
    选择地域
  5. 定位至已购买的数据同步实例,单击配置同步链路
  6. 配置数据同步作业的源库和目标库信息。
    配置源和目标库信息
    类别 配置 说明
    同步作业名称 DTS会自动生成一个同步作业名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。
    源实例信息 实例类型 选择RDS实例
    实例地区 购买数据同步实例时选择的源实例地域信息,不可变更。
    实例ID 选择源RDS实例ID。
    数据库账号 填入源RDS的数据库账号,该账号需具备REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW和所有同步对象的SELECT权限。
    说明 当源RDS实例的数据库类型为MySQL 5.5MySQL 5.6时,无需配置数据库账号数据库密码
    数据库密码 填入该数据库账号的密码。
    连接方式 根据需求选择非加密连接SSL安全连接。如果设置为SSL安全连接,您需要提前开启RDS实例的SSL加密功能,详情请参见设置SSL加密
    目标实例信息 实例类型 选择Tablestore
    实例地区 购买数据同步实例时选择的目标实例地域信息,不可变更。
    实例ID 选择目标Tablestore实例ID。
    AccessKeyId 填入AccessKeyId信息,创建方法请参见创建AccessKey
    AccessKeySecrect 填入AccessKeyId对应的AccessKeySecrect信息。
  7. 单击页面右下角的授权白名单并进入下一步
    此步骤中,DTS会将DTS服务器的IP地址添加至源和目标实例的白名单中,以保障DTS可以正常连接源实例和目标实例。
  8. 配置同步策略及对象信息。
    1. 配置同步策略。
      配置同步策略
      配置 说明
      同步初始化 选中结构初始化全量数据初始化增量数据初始化,相关说明请参见同步初始化类型说明
      目标已存在表的处理模式
      • 预检查并报错拦截:检查目标数据库中是否有同名的表。如果目标数据库中没有同名的表,则通过该检查项目;如果目标数据库中有同名的表,则在预检查阶段提示错误,数据同步作业不会被启动。
        说明 如果目标库中同名的表不能删除或重命名,您可以设置该表在目标库中的名称来避免表名冲突,详情请参见设置同步对象在目标实例中的名称
      • 忽略报错并继续执行:跳过目标数据库中是否有同名表的检查项。
        警告 选择为忽略报错并继续执行,可能导致数据不一致,给业务带来风险,例如:
        • 表结构一致的情况下,如果在目标库遇到与源库主键的值相同的记录,在全量数据初始化阶段会保留目标库中的该条记录;在增量数据同步则会覆盖目标库的该条记录。
        • 表结构不一致的情况下,可能会导致无法初始化数据、只能同步部分列的数据或同步失败。
      多表归并
      • 选择为:通常在OLTP场景中,为提高业务表响应速度,通常会做分库分表处理。此类场景中,您可以借助DTS的多表归并功能将源库中多个表结构相同的表(即各分表)同步至Tablestore实例的同一个表中。
        说明
        • DTS会在Tablestore实例的同步目标表中增加__dts_data_source列(类型为varchar)来存储数据来源。DTS将以<dts数据同步实例ID>:<源数据库名>.<源表名>的格式写入列值用于区分表的来源,例如dts********:dtstestdata.customer1
        • 多表归并功能基于实例级别,如果需要让部分表执行多表归并,另一部分不执行多表归并,您需要为这两批表分别创建数据同步作业。
      • 选择为:默认选项。
      同步操作类型 根据业务选中需要同步的操作类型,默认情况下都处于选中状态。
      脏数据处理策略 选择数据写入错误时的处理策略:
      • 跳过
      • 阻塞
      数据写入模式
      • 行更新:使用PutRowChange会做行级别更新。
      • 行覆盖:使用UpdateRowChange会做行级别覆盖。
      批量写入方式 批量写入调用接口。
      • BulkImportRequest:离线写入。
      • BatchWriteRowRequest:批量写入。
      建议选择BulkImportRequest,读写效率更高,Tablestore实例计费便宜。
      更多设置
      └ 队列大小 Tablestore实例数据写入进程的队列长度。
      └ 线程数 Tablestore实例数据写入进程的回调处理线程数。
      └ 并发数 Tablestore实例的并发请求限制数。
      └ 分桶数 增量按序写入时的分桶并发数,适当调大可提升并发写入能力。
      说明 该值需小于或等于并发数。
    2. 配置同步对象。
      配置同步对象
      配置 说明
      选择同步对象 源库对象框中单击待同步的表(不能超过64个表),然后单击向右小箭头图标将其移动至已选择对象框。

      默认情况下,同步对象的名称保持不变。如果您需要同步对象在目标实例上名称不同,请使用对象名映射功能,详情请参见设置同步对象在目标实例中的名称

      警告 如果在步骤8选择多表归并,选择源库的多个表后,您需要通过对象名映射功能,将其改为Tablestore实例中的同一个表名,否则将导致数据不一致。
      映射名称更改

      如需更改同步对象在目标实例中的名称,请使用对象名映射功能,详情请参见库表列映射

      源表DMS_ONLINE_DDL过程中是否复制临时表到目标库
      如源库使用数据管理DMS(Data Management Service)执行Online DDL变更,您可以选择是否同步Online DDL变更产生的临时表数据。
      • :同步Online DDL变更产生的临时表数据。
        说明 Online DDL变更产生的临时表数据过大,可能会导致同步任务延迟。
      • :不同步Online DDL变更产生的临时表数据,只同步源库的原始DDL数据。
        说明 该方案会导致目标库锁表。
      源、目标库无法连接重试时间
      当源、目标库无法连接时,DTS默认重试720分钟(即12小时),您也可以自定义重试时间。如果DTS在设置的时间内重新连接上源、目标库,同步任务将自动恢复。否则,同步任务将失败。
      说明 由于连接重试期间,DTS将收取任务运行费用,建议您根据业务需要自定义重试时间,或者在源和目标库实例释放后尽快释放DTS实例。
    3. 单击下一步
  9. 可选:已选择对象区域框中,将鼠标指针放置在待同步的表上,并单击表名后出现的编辑,设置该表中各列在Tablestore实例中的数据类型。
    设置数据类型
  10. 配置待同步的表在Tablestore实例中的主键列信息。
    RDS同步至tablestore高级配置
    说明 关于Tablestore实例中主键的相关介绍,请参见主键
  11. 上述配置完成后,单击页面右下角的预检查并启动
    说明
    • 在同步作业正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动同步作业。
    • 如果预检查失败,单击具体检查项后的提示,查看失败详情。
      • 您可以根据提示修复后重新进行预检查。
      • 如无需修复告警检测项,您也可以选择确认屏蔽忽略告警项并重新进行预检查,跳过告警检测项重新进行预检查。
  12. 预检查对话框中显示预检查通过后,关闭预检查对话框,同步作业将正式开始。
  13. 等待同步作业的链路初始化完成,直至处于同步中状态。
    您可以在数据同步页面,查看数据同步作业的状态。查看同步作业状态