本文介绍如何使用数据传输服务DTS(Data Transmission Service),将Amazon RDS for PostgreSQL迁移至阿里云RDS PostgreSQL。DTS支持结构迁移、全量数据迁移以及增量数据迁移,同时使用这三种迁移类型可以实现在自建应用不停服的情况下,平滑地完成数据库迁移。
前提条件
- Amazon RDS for PostgreSQL的数据库版本为10.4-R1至11.4-R1版本。
- 为保障DTS能够通过公网连接Amazon RDS for PostgreSQL,需要将其公开访问设置为是。
- 为保障DTS能够读取Amazon RDS for PostgreSQL的增量数据变更信息,需要将其参数组中rds.logical_replication参数的值修改为1。
- 已创建阿里云RDS PostgreSQL,详情请参见创建RDS PostgreSQL。
说明
- 阿里云RDS PostgreSQL的数据库版本为10或11版本,如需跨版本迁移,请创建一个按量付费的实例以验证兼容性。
- 阿里云RDS PostgreSQL的存储空间,须大于Amazon RDS for PostgreSQL中待迁移数据库占用的存储空间。
注意事项
- DTS在执行全量数据迁移时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,在数据库性能较差、规格较低或业务量较大的情况下(例如源库有大量慢SQL、存在无主键表或目标库存在死锁等),可能会加重数据库压力,甚至导致数据库服务不可用。因此您需要在执行数据迁移前评估源库和目标库的性能,同时建议您在业务低峰期执行数据迁移(例如源库和目标库的CPU负载在30%以下)。
- 如果待迁移对象没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据或迁移失败。
- 一个数据迁移任务只能迁移一个数据库,如果有多个数据库需要迁移,则需要为每个数据库创建数据迁移任务。
- 仅支持DML操作(INSERT、DELETE、UPDATE)的同步。
- 在数据迁移的过程中,DTS会在Amazon RDS for PostgreSQL中创建前缀为
dts_sync_
的replication slot用于复制数据。DTS会每隔90分钟自动清理一次历史replication slot,避免其持续累积占用磁盘空间。说明 当释放迁移任务或迁移失败时,DTS会主动清理该replication slot;如果Amazon RDS for PostgreSQL发生了主备切换,则需要您登录备库来手动清理。 - 对于迁移失败的任务,DTS会触发自动恢复。在您将业务切换至目标实例前,请务必先结束或释放该任务,避免该任务被自动恢复后,导致源端数据覆盖目标实例的数据。
费用说明
迁移类型 | 链路配置费用 | 公网流量费用 |
---|---|---|
结构迁移和全量数据迁移 | 不收费。 | 通过公网将数据迁移出阿里云时将收费,详情请参见产品定价。 |
增量数据迁移 | 收费,详情请参见产品定价。 |
迁移类型说明
- 结构迁移
DTS将迁移对象的结构定义迁移至阿里云RDS PostgreSQL,支持结构迁移的对象包含TABLE、TRIGGER、VIEW、SEQUENCE、FUNCTION、USER DEFINED TYPE、RULE、DOMAIN、OPERATION、AGGREGATE。说明 不支持迁移使用C语言编写的FUNCTION。
- 全量数据迁移
将迁移对象的存量数据全部迁移到阿里云RDS PostgreSQL数据库中。
- 增量数据迁移
DTS在全量数据迁移的基础上,将迁移对象的增量更新迁移到阿里云RDS PostgreSQL数据库中。通过增量数据迁移可以实现在应用不停服的情况下,平滑地完成数据迁移。
数据库账号的权限要求
数据库 | 结构迁移 | 全量迁移 | 增量迁移 |
---|---|---|---|
Amazon RDS for PostgreSQL | pg_catalog的usage权限 | 迁移对象的select权限 | rds_superuser权限 |
阿里云RDS PostgreSQL | 迁移对象的create、usage权限 | schema的owner权限 | schema的owner权限 |
数据迁移流程
为解决对象间的依赖,提高迁移成功率,DTS对PostgreSQL结构及数据的迁移顺序如下。