从RDS PostgreSQL迁移至RDS MySQL

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

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

前提条件

注意事项

  • DTS在执行全量数据迁移时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,在数据库性能较差、规格较低或业务量较大的情况下(例如源库有大量慢SQL、存在无主键表或目标库存在死锁等),可能会加重数据库压力,甚至导致数据库服务不可用。因此您需要在执行数据迁移前评估源库和目标库的性能,同时建议您在业务低峰期执行数据迁移(例如源库和目标库的CPU负载在30%以下)。

  • 如果源库中待迁移的表没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。

  • 为保障迁移任务的正常进行,目前仅支持RDS PostgreSQL 11进行主备切换,且需设置参数 rds_failover_slot_modesync,设置方式,请参见逻辑复制槽故障转移(Logical Replication Slot Failover)
    警告 自建PostgreSQL和其他版本的RDS PostgreSQL进行主备切换,会导致迁移中断。
  • 修改RDS PostgreSQL的连接地址和可用区,会导致迁移中断。
  • 暂不支持结构迁移,在配置迁移任务前,您需要在目标实例中创建对应的库和表。
  • 一个数据迁移任务只能对一个数据库进行数据迁移,如果有多个数据库需要迁移,则需要为每个数据库创建数据迁移任务。
  • 对于迁移失败的任务,DTS会触发自动恢复。当您需要将业务切换至目标实例,请务必先终止或释放该任务,避免该任务被自动恢复后,导致源端数据覆盖目标实例的数据。
  • 在数据期间执行主备切换操作,会使增量数据迁移失败。如果您需要执行主备切换,请在迁移完成后操作。
  • 若源库有长事务,且实例包含增量迁移任务,则可能会导致源库长事务提交前的预写日志WAL(Write-Ahead Logging)无法清理而堆积,从而造成源库磁盘空间不足。

费用说明

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

迁移类型说明

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

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

数据库账号的权限要求

数据库全量迁移增量迁移
RDS PostgreSQL实例迁移对象的select权限superuser权限
说明 当源库为RDS PostgreSQL 9.4,且仅需增量迁移DML操作时,账号具备replication权限即可。
RDS MySQL实例读写权限读写权限
数据库账号创建及授权方法:
  1. 登录数据传输控制台

    说明

    若数据传输控制台自动跳转至数据管理DMS控制台,您可以在右下角的jiqiren中单击返回旧版,返回至旧版数据传输控制台。

  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慢日志提升迁移性能
      只勾选增量迁移;
      目标已存在表的处理模式
      • 预检查并报错拦截:检查目标库是否为空。如果待同步的目标库为空,则通过该检查项目;如果不为空,则在预检查阶段提示错误,数据同步作业不会被启动。
      • 忽略报错并继续执行:跳过目标库是否为空的检查项。
        警告 选择为忽略报错并继续执行后,如果在同步过程中遇到目标库中的Key与源库中的Key相同,会将源库的数据覆盖写入目标库中,请谨慎选择。
      同步对象

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

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

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

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