最近更新时间:2023.08.17 14:58:53
首次发布时间:2021.11.23 10:18:01
本文介绍当迁移的目标库类型为 PostgreSQL(如 RDS PostgreSQL 或自建 PostgreSQL)时,支持的数据库以及使用限制详情。
源库限制
带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移速率。
待迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标库中出现重复数据。
建议单任务表数量不超过 2 万,库数量不超过 50。如果有大批量表需要迁移,建议拆分成多个任务。
如需进行增量迁移:
需开启 WAL 日志,即设置 wal_level 参数的值为 logical。
wal_level
logical
建议在全量迁移期间,WAL 日志至少保留 7 天以上。或者等到全量迁移完成后,再清理 DTS 任务运行后源库产生的数据日志。
用于数据迁移的账号需具备以下权限:
源库账号需要具有 superuser 权限,以便于创建逻辑复制槽。
superuser
目标库账号需要具有创建 schema 权限,如果目标库 schema 已存在,则迁移账号需要是目标 schema 的 owner 权限。
schema
源库的操作限制如下:
在库表结构迁移和全量迁移阶段,请勿执行库或表结构变更的 DDL 操作,否则数据迁移任务会失败。
如仅执行全量数据迁移,请勿向源库中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择结构迁移、全量数据迁移和增量数据迁移。
其他限制
单个数据迁移任务只能迁移一个数据库,如需迁移多个数据库,您需要为每个数据库配置数据迁移任务。
增量数据迁移期间,如果迁移对象的选择粒度为 schema,在待迁移的 schema 中创建了新的表或使用 RENAME 命令重建了待迁移的表,您需要在对该表写入数据前执行 ALTER TABLE schema.table REPLICA IDENTITY FULL; 命令。
ALTER TABLE schema.table REPLICA IDENTITY FULL;
说明
执行时将上述命令中的 schema 和 table 替换成真实的 schema 名和表名。
table
增量数据迁移期间,DTS 会在源库中创建前缀为 dts_sync_ 的 replication slot 用于复制数据。DTS 会每隔 5~10 分钟自动清理一次历史 replication slot,避免其持续累积占用磁盘空间。
dts_sync_
当释放迁移任务或迁移失败时,DTS 会主动清理该 replication slot。
如果 RDS PostgreSQL 发生了主备切换,则需要您登录备库来手动清理。
执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时 DTS 占用源和目标库一定读写资源,可能会导致数据库的负载上升。
由于全量数据迁移会并发执行 INSERT 操作,导致目标库的表产生碎片,因此全量迁移完成后目标库的表存储空间会比源库的表存储空间大。
迁移前请确认源库和目标库字符串是否一致,否则可能会导致预检查失败。
特殊情况
当源库为自建 PostgreSQL,在执行迁移任务时,请勿对源库进行主备切换操作,否则将导致迁移任务失败。在迁移时如果源库执行了重启操作,迁移任务会暂时中断并自动尝试修复。如果任务长时间没恢复,请提交工单联系技术支持。
当您想跨账号迁移 PostgreSQL 且需要进行增量迁移时,建议在源端实例所属的账号下发起迁移任务,目标端可通过公网自建的形式完成任务迁移。
若源库是阿里云 PolarDB PostgreSQL,且目标库是火山引擎 RDS PostgreSQL,在配置迁移任务时,请确保您使用的是 PolarDB PostgreSQL 的主地址而不是集群地址,否则会由于无法建立逻辑复制槽导致迁移失败。
支持的数据库
使用限制