本文介绍如何使用数据传输服务DTS(Data Transmission Service),将Amazon RDS PostgreSQL全量迁移至阿里云RDS PostgreSQL。
前提条件
- Amazon RDS PostgreSQL的数据库版本为9.4、9.5、9.6或10.0版本。
- 为保障DTS能够通过公网连接至Amazon RDS PostgreSQL,需要将Amazon RDS PostgreSQL的公开可用性设置为是。
- 已创建阿里云RDS PostgreSQL,详情请参见创建RDS PostgreSQL。
说明 阿里云RDS PostgreSQL的数据库版本为9.4或10版本。
- 阿里云RDS PostgreSQL的存储空间,须大于Amazon RDS PostgreSQL中待迁移数据库占用的存储空间。
注意事项
- DTS在执行全量数据迁移时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,在数据库性能较差、规格较低或业务量较大的情况下(例如源库有大量慢SQL、存在无主键表或目标库存在死锁等),可能会加重数据库压力,甚至导致数据库服务不可用。因此您需要在执行数据迁移前评估源库和目标库的性能,同时建议您在业务低峰期执行数据迁移(例如源库和目标库的CPU负载在30%以下)。
- 不支持增量数据迁移。即需要在执行数据迁移前,停止Amazon RDS PostgreSQL的相关业务,同时为了保障数据一致性,迁移期间请勿在Amazon RDS PostgreSQL中写入新的数据。
- 一个数据迁移任务只能迁移一个数据库,如果有多个数据库需要迁移,则需要为每个数据库创建数据迁移任务。
- 不支持迁移使用C语言编写的function。
- 如果源库中待迁移的表没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。
- 对于迁移失败的任务,DTS会触发自动恢复。在您将业务切换至目标实例前,请务必先结束或释放该任务,避免该任务被自动恢复后,导致源端数据覆盖目标实例的数据。
- 为保障迁移任务的正常进行,目前仅支持RDS PostgreSQL 11进行主备切换,且需设置参数
rds_failover_slot_mode
为sync
,设置方式,请参见逻辑复制槽故障转移(Logical Replication Slot Failover)。警告 自建PostgreSQL和其他版本的RDS PostgreSQL进行主备切换,会导致迁移中断。
费用说明
迁移类型 | 链路配置费用 | 公网流量费用 |
---|---|---|
结构迁移和全量数据迁移 | 不收费 | 通过公网将数据迁移出阿里云时将收费,详情请参见计费概述。 |
迁移类型说明
- 结构迁移
DTS将迁移对象的结构定义迁移至阿里云RDS PostgreSQL,支持结构迁移的对象包含table、trigger、view、sequence、function、user defined type、rule、domain、operation及aggregate。
- 全量数据迁移
将迁移对象的存量数据全部迁移到阿里云RDS PostgreSQL数据库中。
数据库账号的权限要求
数据库 | 结构迁移 | 全量迁移 |
---|---|---|
Amazon RDS PostgreSQL | pg_catalog的usage权限 | 迁移对象的select权限 |
阿里云RDS PostgreSQL | 迁移对象的create、usage权限 | schema的owner权限 |
全量数据迁移流程
为解决对象间的依赖,提高迁移成功率,DTS对PostgreSQL结构及数据的迁移顺序如下。
- 执行Table、view、sequence、function、user defined type、rule、domain、operation、aggregate的结构迁移。
- 执行全量数据迁移。
- 执行trigger、foreign key的结构迁移。
准备工作一:调整Amazon的入站规则
准备工作二:在阿里云RDS实例中创建数据库和schema
根据待迁移对象所属的数据库和schema信息,在阿里云RDS PostgreSQL中创建相应数据库和schema(schema名称须一致),详情请参见创建数据库和schema管理。