支持的源和目标数据库
支持的源和目标数据库如下表:
源数据库 | 目标数据库 |
---|---|
RDS for PostgreSQL 自建PostgreSQL 9.4/9.5/9.6/10/11/12/13/14/15 |
RDS for PostgreSQL |
说明
源库为本地自建PostgreSQL数据库时,支持9.4/9.5/9.6/10/11/12/13/14/15版本。
源数据库版本不得高于目标数据库版本。
支持的迁移对象及SQL
迁移对象
- 结构迁移支持的对象:
- 模式、表、索引、约束(外键、唯一、排他)、视图、物化视图、序列、存储过程、函数、规则、触发器、用户自定义类型、域。
- 支持的字段类型:
- 数字类型、货币类型、字符类型、二进制数据类型、日期/时间类型、布尔类型、枚举类型、几何类型、网络地址类型、位串类型、文本搜索类型、UUID类型、XML类型、JSON类型、复合类型、范围类型。
注意事项
- 每次至多同步一个库(database),同步多个库需要创建多个DTS任务。
- 模式:不支持pg_toast,pg_temp_1,pg_toast_temp_1,pg_catalog,information_schema等系统模式的迁移。
- 表:不支持临时表的迁移,表的索引、约束会一起迁移,表的触发器、规则在全量完成之后迁移。
- 序列:待迁移的表中有引用序列时,必须同时迁移相应的序列。
- 映射规则:
- 不包含增量时,可以对库、表、列名进行映射,若对表的列进行映射,则表中涉及到该列的约束将不会迁移。
- 包含增量时,不支持对库、表、列名映射。
- 视图、存储过程、函数、域、自定义类型等对象依赖的表不支持做表名映射,否则视图、存储过程、函数将会失效。
- 同步对象中如果存在包含longtext、longblob类型大字段的表,建议创建大规格及以上规格的DTS实例进行同步,否则可能会导致 OOM。
增量数据迁移支持的SQL操作
-
DML
INSERT、UPDATE、DELETE。
-
DDL
增量迁移的DDL操作仅支持CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE SEQUENCE、ALTER SEQUENCE、DROP SEQUENCE、CREATE VIEW、ALTER VIEW、DROP VIEW、CREATE INDEX、ALTER INDEX、DROP INDEX。
注意
暂不支持 CREATE TABLE 表名 AS SELECT 语句。
RENAME表名之后,向更改名称后的表插入新的数据时,DTS不会同步新的数据到目标库,因可能会导致任务中断异常或数据不一致。
暂不支持以注释开头的DDL语句的同步。
数据库账号及权限
数据库账号及权限如下表:
数据库 所需权限 参考赋权语句 源库
模式的USAGE权限。
待迁移对象的SELECT权限包含增量时,需具备SUPERUSER权限。
授予user_name用户schema_name模式的usage权限:
GRANT USAGE ON SCHEMA schema_name TO user_name;
授予user_name用户object_name对象的select权限:
GRANT SELECT ON object_name TO user_name;授予user_name用户超级权限:
ALTER USER user_name WITH SUPERUSER;目标库
schema的创建权限。
授予用户user_name在数据库database_name下的schema创建权限:
GRANT CREATE ON DATABASE database_name TO user_name;
准备工作
-
登录自建PostgreSQL所属的服务器。
-
修改配置文件postgresql.conf,将配置文件中的wal_level设置为logical。如下图:
-
将DTS的IP地址加入至自建PostgreSQL的配置文件pg_hba.conf中。如下图:
如果您已将信任地址配置为0.0.0.0/0,可跳过本步骤。
-
如果任务包含增量迁移,需安装PostgreSQL的逻辑解码器输出插件Decoderbufs,建议安装v2.1.1.Final以上版本,低版本可能会导致PostgreSQL数据库出现coredump,详细的安装步骤可参考PostgreSQL官网文档。
操作需知
DTS迁移过程一般包含四个阶段:预检查阶段、结构迁移阶段、全量阶段、增量阶段。为了确保数据迁移各个阶段的平顺,在创建迁移任务前,请务必阅读以下使用须知。
任务开始前
源库要求
- 源数据库的分区表触发器不可以设置为disable。
- 全量同步支持源库备机状态,但需要设置hot_standby_feedback为on;增量同步不支持源库备机状态。
- 同步对象依赖和关联的对象也须一起同步,否则可能导致任务失败。
- 若要做增量同步,源数据库的“pg_hba.conf” 文件中包含如下的配置:
- host replication all 0.0.0.0/0 md5源数据库参数wal_level必须配置为logical;
- 源数据库需提前安装Decoderbufs插件;
- 源数据库中无主键表的replica identity属性必须为full;
- 源数据库的max_replication_slots参数值必须大于当前已使用的复制槽数量;
- 源数据库的max_wal_senders参数值必须等于或大于max_replication_slots参数值;
- 源数据库中表的主键列toast属性为main、external、extended时,其replica identity属性必须为full。
- 同步对象依赖和关联的对象也须一起同步,否则可能导致任务失败。
目标库要求
- 目标数据库的block_size参数值必须大于或等于源库中的对应参数值。
- 目标数据库和源数据库的lc_monetary参数值一致。
- 若要做增量同步,且同步对象包含外键、触发器或事件触发器,则目标数据库的session_replication_role参数必须设置为replica,同步结束后,此参数需改为origin。
- 目标库不可以包含与待同步对象类型相同且名称相同的对象,包括模式、表、序列等,否则任务可能出差。系统库、系统模式、系统表等除外。
- 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
- 对于全量+增量和增量任务,启动前请确保源库中未启动长事务,启动长事务会阻塞逻辑复制槽的创建,进而引发任务失败。
- 若选择同步DDL,须注意源库执行DDL时,确保在目标库上是兼容的。
- 目标数据库关联RDS实例必须有足够的磁盘空间,磁盘大小建议取以下两种中的最小值:
- 源库待迁移数据量大小的1.5倍。
- 源库待迁移数据量大小加200GB。
结构、全量过程中
- 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
- 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。
- 请勿在目标库做写入操作,否则可能导致数据不一致。
增量过程中
- 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
- 请勿修改源数据库表的主键或者唯一键(主键不存在时),否则可能导致增量数据不一致或任务失败。
- 请勿修改源数据库中表的replica identity属性,否则可能导致增量数据不一致或任务失败。
- 请勿在目标库做写入操作,否则可能导致数据不一致。
- 库级同步时,源库新增无主键表时,请务必同时将该无主键表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。
- 库级同步时,源库新增主键表时,如果主键列toast属性为main、external、extended时,请务必同时将该表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。
- 若选择同步DDL,须注意源库执行DDL时,确保在目标库上是兼容的。
数据稽核
- 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DTS任务的冲击。
- 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。
操作步骤
1、购买DTS数据迁移实例。
在管理控制台点击“创建实例”进入订购页面,“实例类型”选择“数据迁移”,“目标库实例”的“数据库类型”选择PostgreSQL,选择实例,完成其他信息的填写并完成购买。
2、进入实例配置页面。
DTS实例购买成功后,进入【实例配置】页面,上一步骤购买成功的实例在实例列表中显示状态为“待配置”,点击该实例操作列的“实例配置”按钮。
3、配置源库及目标库信息。
进入实例配置第一个步骤的【配置源库及目标库信息】页面,填入源库与目标库的相关配置信息,包括数据库类型、IP地址端口、数据库账号、数据库密码等信息。
完成上述信息的填写后,点击源数据库和目标数据库的“测试连接”按钮进行数据库连接测试,检查数据库能否正常连接。
4、配置迁移对象及高级配置。
源库和目标库连通性测试成功后,点下一步按钮,进入实例配置第二个步骤的【配置迁移对象及高级配置】页面,在“源库对象”中选择要迁移的源库对象,包含:库、TABLE、VIEW、FUNCTION等,选中后点击“>”按钮,将待迁移对象移动到“已选择对象”中。
迁移对象配置说明:
配置 | 说明 |
---|---|
任务步骤 | 如果只需要进行全量迁移,请同时勾选库表结构迁移和 全量迁移 。 如果需要进行不停机迁移,请同时勾选库 表结构迁移 、全量迁移和 增量迁移 。 注意: 如果未选择增量迁移,为保障数据一致性,数据迁移期间请勿在源实例中执行DML和DDL操作。 |
迁移对象 | 源库为PostgreSQL的情况下,支持表、视图、函数、存储过程、物化视图、规则、触发器,域、自定义类型等对象的迁移。 在迁移对象框中单击待迁移的对象,然后单击将其移动到已选择对象框;已选择对象可以通过单击将对象回退。 选择迁移对象时,如不展开库的详细信息,则表示整库迁移,后续在增量任务过程中,可在源库创建新表,其他类型暂不支持。 |
映射名称更改 | 支持库表列三级名称映射,如需更改单个迁移对象在目标实例中的库名、表名和列名,选择对象,然后点击编辑按钮。 如需批量更改迁移对象在目标实例中的库名、表名,请单击已选择对象方框右上方的“批量编辑”。 若迁移任务仅包含结构迁移和全量迁移,支持列映射名称更改,若迁移任务包含增量迁移,不允许列映射名称更改。 库表名仅支持字母、数字和下划线,长度不超过64个字符。 注意: 整库迁移时不建议做库表名映射。 |
过滤待迁移数据 | 支持设置where条件过滤数据,过滤条件不允许;和--字符,如需使用引号,请使用单引号('),只有满足where条件的数据才会迁移到目标库。 |
增量迁移的DML | 选择增量迁移DML操作,选中迁移对象,点击“编辑”,在弹跳框中选择所需增量迁移的DML操作。若在数据库级别和表级别都指定了DML操作,则表级别的设置会覆盖库级别的。 |
增量迁移的DDL | 增量任务可选择是否迁移增量DDL。 |
是否定时开始任务 | 可选择任务开始的时间,默认点击开始任务后立即启动迁移任务。 |
注意
任务中存在整库迁移的情况下,则必须勾选增量DDL同步。
非整库迁移的情况下,若选择DDL同步,则只迁移待迁移对象的DDL语句。
非整库迁移的情况下,若未选择增量DDL同步,则增量阶段不会同步任何DDL语句。
5、预检查和启动迁移。
完成迁移对象和高级配置后,点击“下一步预检查”,进入实例配置第三个步骤的【预检查】页面。预检查会检查如下列表信息,并给出检查结果,用户可以依据检查结果进行下一步操作。
检查项 | 检查内容 |
---|---|
lc_monetary参数配置一致性检查 | 检查源库与目标库的lc_monetary参数配置是否一致。 |
pg版本检查 | 检查源库和目标库的pg版本是不是符合要求。 |
同名对象存在性检查 | 检查目标库中是否存在和待迁移库同名的待迁移对象。 |
扩展插件兼容性检查 | 检查源库中安装的扩展插件,在目标库是否存在。 |
约束完整性检查 | 检查待迁移对象中子表依赖的父表是否被选中。 |
检查hot_standby_feedback参数配置 | 全量迁移源库pg为备节点时,hot_standby_feedback参数需配置为ON。 |
源库用户权限检查 | 检查源库用于DTS任务的用户是否具有相应的权限。 |
源库连通性检查 | 检查数据传输服务器能否连通源数据库。 |
源数据库的模式名表名是否合法 | 检查源数据库的模式名表名是否合法,名称不可以包含+"%'<>,.字符。 |
源库参数wal_level是否为logical | 勾选增量迁移时,检查源库wal_level参数值是否为logical。 |
目标库用户权限检查 | 检查目标库用于DTS任务的用户是否具有相应的权限。 |
目标库连通性检查 | 检查数据传输服务器能否连通目标数据库。 |
源库参数max_replication_slots校验 | 勾选增量迁移时,检查源库max_replication_slots参数值是否大于当前已使用的复制槽数量。 |
源库参数max_wal_senders校验 | 勾选增量迁移时,检查源库max_wal_senders参数值是否大于当前已使用的复制槽数量。 |
逻辑解码插件安装校验 | 勾选增量迁移时,检查源库是否安装逻辑解码插件decoderbufs。 |
待迁移表是否存在主键检查 | 勾选增量迁移时,检查待迁移表中是否存在无主键的表。 |
无日志表存在性检查 | 勾选增量迁移时,检查当前选择的待同步对象中的表是否存在无日志表。 |
源库主备状态检查 | 勾选增量迁移时,检查源库是否为集群中的主库。 |
ddl同步元数据检查 | 勾选ddl同步时,检查源库是否有ddl同步所需的元数据对象。 |
如果预检查通过,可点击【预检查】页面底部的“启动迁移”按钮,开始迁移任务。