本文介绍如何使用数据传输服务DTS(Data Transmission Service),将RDS PostgreSQL迁移至RDS MySQL。DTS支持全量数据迁移和增量数据迁移,同时使用这两种迁移类型可以实现在自建应用不停服的情况下,平滑地完成数据库的迁移。

前提条件

注意事项

  • DTS在执行全量数据迁移时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,在数据库性能较差、规格较低或业务量较大的情况下(例如源库有大量慢SQL、存在无主键表或目标库存在死锁等),可能会加重数据库压力,甚至导致数据库服务不可用。因此您需要在执行数据迁移前评估源库和目标库的性能,同时建议您在业务低峰期执行数据迁移(例如源库和目标库的CPU负载在30%以下)。
  • 如果源库中待迁移的表没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。
  • 为保障迁移任务的正常进行,目前仅支持RDS PostgreSQL 11进行主备切换,且需设置参数 rds_failover_slot_modesync,设置方式,请参见逻辑订阅故障转移(Failover Slot)
    警告 自建PostgreSQL和其他版本的RDS PostgreSQL进行主备切换,会导致迁移中断。
  • 修改RDS PostgreSQL的连接地址和可用区,会导致迁移中断。
  • 一个数据迁移任务只能对一个数据库进行数据迁移,如果有多个数据库需要迁移,则需要为每个数据库创建数据迁移任务。
  • 对于迁移失败的任务,DTS会触发自动恢复。当您需要将业务切换至目标实例,请务必先终止或释放该任务,避免该任务被自动恢复后,导致源端数据覆盖目标实例的数据。
  • 在数据期间执行主备切换操作,会使增量数据迁移失败。如果您需要执行主备切换,请在迁移完成后操作。

费用说明

迁移类型 链路配置费用 公网流量费用
全量数据迁移 不收费。 通过公网将数据迁移出阿里云时将收费,详情请参见产品定价
增量数据迁移 收费,详情请参见产品定价

迁移类型说明

迁移类型 说明
结构数据迁移 DTS将源库中迁移对象的结构定义迁移到目标库。
全量数据迁移 DTS会将源库中迁移对象的存量数据,全部迁移至目标RDS MySQL实例。
注意 在结构迁移和全量数据迁移完成之前,请勿对迁移对象执行DDL操作,否则可能导致迁移失败。
增量数据迁移 DTS在全量数据迁移的基础上轮询并捕获源库产生的Redo Log,将源库的增量更新实时迁移到目标RDS MySQL实例。目前支持仅支持同步DML操作(INSERT、UPDATE、DELETE),暂不支持同步DDL操作。

通过增量数据迁移可以实现在应用不停服的情况下,平滑地完成数据迁移。

数据库账号的权限要求

数据库 结构迁移 全量迁移 增量迁移
RDS PostgreSQL实例 pg_catalog的usage权限 迁移对象的select权限 superuser权限
说明 当源库为RDS PostgreSQL 9.4,且仅需增量迁移DML操作时,账号具备replication权限即可。
RDS MySQL实例 读写权限 读写权限 读写权限
数据库账号创建及授权方法:
  1. 登录数据传输控制台
  2. 在左侧导航栏,单击数据迁移
  3. 迁移任务列表页面顶部,选择迁移的目标集群所属地域。
    选择地域
  4. 单击页面右上角的体验新版控制台
  5. 创建任务页面,根据页面信息完成迁移任务配置。
    1. 设置以下参数,配置源库及目标库信息。配置源库及目标信息
      类别 配置 说明
      任务名称 DTS会自动生成一个任务名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。
      源库信息 选择已有的数据库连接模版 选择一个已有的数据库连接模板,方便您快速配置源库信息。
      数据库类型 选择PostgreSQL
      接入方式 选择阿里云实例
      实例地区 选择RDS PostgreSQL实例所在地域。
      实例ID 选择RDS PostgreSQL实例的ID。
      数据库名称 填入RDS PostgreSQL实例的名称。
      数据库账号 填入RDS PostgreSQL的数据库账号。
      数据库密码 填入该数据库账号对应的密码。
      将连接信息保存为模板 将配置好的源库信息保存为模板。
      目标库信息 数据库类型 选择MySQL
      接入方式 选择阿里云实例
      实例地区 选择RDS MySQL实例所在地域。
      RDS实例ID 选择RDS MySQL实例的ID。
      数据库账号 填入RDS MySQL实例的数据库账号。
      数据库密码 填入该数据库账号对应的密码。
      连接方式 根据需求选择非加密连接SSL安全连接。如果设置为SSL安全连接,您需要提前开启RDS MySQL实例的SSL加密功能,详情请参见设置SSL加密
      说明 目前仅中国内地及中国香港地域支持设置连接方式
      将连接信息保存为模板 将配置好的源库信息保存为模板。
    2. 配置完成后,单击页面下方的测试连接以进行下一步来验证源库和目标库的信息配置是否正确。
      • 如果提示测试通过,说明配置正确。
      • 如果提示测试失败,单击测试失败后的诊断,并根据提示调整源库或目标库信息。
    3. 设置以下参数,配置任务对象及高级配置。
      类别 配置 说明
      基础配置 任务步骤 建议同时勾选结构迁移全量迁移增量迁移,以保证迁移数据的一致性。
      只勾选结构迁移全量迁移
      • 全量迁移过程中,RDS PostgreSQL有数据更新时,更新数据不一定能够被迁移至RDS MySQL。
      • 当RDS MySQL实例的CPU规格低于2核时,建议您关闭慢日志,具体请参见关闭RDS MySQL慢日志提升迁移性能
      只勾选增量迁移;
      目标已存在表的处理模式
      • 预检查并报错拦截:在迁移任务正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动迁移任务。如果预检查失败,单击具体检查项后的提示图标,查看失败详情。根据提示修复问题后,重新进行预检查。
      • 忽略报错并继续执行:直接进行迁移任务。
      同步对象

      源库对象框中单击待迁移的对象,然后单击选择左移将其移动至已选择对象框。

      说明
      • 迁移对象选择的粒度为库、表、列。
      • 默认情况下,迁移对象在目标库中的名称与源库保持一致。如果您需要改变迁移对象在目标库中的名称,需要使用对象名映射功能,详情请参见库表列映射
      • 如果使用了对象名映射功能,可能会导致依赖这个对象的其他对象迁移失败。
      高级配置 设置告警 根据实际需求选择是否需要上报告警。
      • 不设置:不会上报告警。
      • 设置:上报告警。
      源库、目标库无法连接后的重试时间 取值范围为10~1440。建议设置30分钟以上。对于同源或者同目标的多个dts实例,例如实例dtsA和实例dtsB,设置网络重试时间时dtsA设置30分钟,dtsB设置60分钟,则重试时间以低的30分钟为准。
    4. 配置完成后,单击页面下方的下一步保存任务并预检查
    5. 在迁移任务启动之前,进行预检查。当预检查通过后,DTS才能开始迁移数据。如果预检查失败,请单击检查失败项后的查看详情,根据提示信息修复后,重新进行预检查。
    6. 预检查完成后,单击页面下方的下一步购买
    7. 购买页面,选择链路规格,并勾选数据传输(按量付费)服务条款
    8. 单击购买并启动,迁移任务正式开始。
      • 全量数据迁移

        请勿手动结束迁移任务,否则可能会导致数据不完整。您只需等待迁移任务完成即可,迁移任务会自动结束。

      • 增量数据迁移
        迁移任务不会自动结束,需要手动结束迁移任务。
        1. 观察迁移任务的进度变更为增量迁移,并显示为无延迟状态时,将源库停写几分钟,此时增量迁移的状态可能会显示延迟的时间。
        2. 等待迁移任务的增量迁移再次进入无延迟状态,手动结束迁移任务。
      说明 如果不需要继续进行数据迁移,您可以在数据迁移列表中,单击目标任务所在行的操作释放任务。
  6. 如果需要将业务从RDS PostgreSQL实例切换至RDS MySQL实例,请参见业务切换流程