PolarDB是阿里云自研的下一代关系型云数据库,有三个独立的引擎,分别可以100%兼容MySQL、100%兼容PostgreSQL、高度兼容Oracle语法,适用于企业多样化的数据库应用场景。通过使用数据传输服务DTS(Data Transmission Service),您可以实现PolarDB O引擎集群间的数据迁移。
前提条件
- 由于该功能目前仅在华东2(上海)地域支持,要求源和目标PolarDB O引擎集群均属于华东2(上海)地域。
- 源PolarDB O引擎集群中,待迁移的表需具备主键或非空唯一索引。
- 源PolarDB O引擎集群中,wal_level参数的值需设置为logical,即在预写式日志WAL(Write-ahead logging)中增加支持逻辑编码所需的信息。详情请参见设置集群参数。
注意事项
- DTS在执行全量数据迁移时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,在数据库性能较差、规格较低或业务量较大的情况下(例如源库有大量慢SQL、存在无主键表或目标库存在死锁等),可能会加重数据库压力,甚至导致数据库服务不可用。因此您需要在执行数据迁移前评估源库和目标库的性能,同时建议您在业务低峰期执行数据迁移(例如源库和目标库的CPU负载在30%以下)。
- 一个数据迁移任务只能迁移一个数据库,如有多个数据库需要迁移,您需要为每个数据库配置数据迁移任务。
- 在增量数据迁移过程中,如果迁移对象的选择粒度为Schema,在待迁移的Schema中创建了新的表或使用RENAME命令重建了待迁移的表,您需要在对该表写入数据前执行
ALTER TABLE schema.table REPLICA IDENTITY FULL;
命令。说明 将上述命令中的schema
和table
替换成真实的Schema名和表名。 - 为保障增量数据迁移延迟时间展示的准确性,DTS会在源库中新增一个表,表名为
dts_postgres_heartbeat
,结构及内容如下图所示。 - 对于迁移失败的任务,DTS会触发自动恢复。在您将业务切换至目标库之前,请务必先停止或释放该任务,避免该任务被自动恢复,导致源端数据覆盖目标库的数据。
- 若源库有长事务,且实例包含增量迁移任务,则可能会导致源库长事务提交前的预写日志WAL(Write-Ahead Logging)无法清理而堆积,从而造成源库磁盘空间不足。
费用说明
迁移类型 | 链路配置费用 | 公网流量费用 |
---|---|---|
结构迁移和全量数据迁移 | 不收费。 | 通过公网将数据迁移出阿里云时将收费,详情请参见计费概述。 |
增量数据迁移 | 收费,详情请参见计费概述。 |
迁移类型说明
迁移类型 | 说明 |
---|---|
结构迁移 | DTS将迁移对象的结构定义迁移到目标PolarDB集群。目前支持的对象包括:表、视图、同义词、触发器(不兼容)、存储过程、存储函数、包、自定义类型。
重要 不兼容触发器。当迁移对象包含了触发器可能导致数据不一致。
|
全量数据迁移 | DTS会将源库中迁移对象的存量数据,全部迁移至目标PolarDB集群。
重要 在结构迁移和全量数据迁移完成之前,请勿对迁移对象执行DDL操作,否则可能导致迁移失败。
|
增量数据迁移 | DTS在全量数据迁移的基础上轮询并捕获源库产生的Redo Log,将源库的增量更新实时迁移到目标PolarDB集群。目前支持仅支持同步DML操作(INSERT、UPDATE、DELETE),暂不支持同步DDL操作。
通过增量数据迁移可以实现在应用不停服的情况下,平滑地完成数据迁移。 |