本文为您介绍使用数据传输服务 DTS 从 PostgreSQL 数据库同步数据至腾讯云数据库 PostgreSQL 的过程。
源数据库支持的部署类型如下:
自建 PostgreSQL。
第三方云厂商 PostgreSQL。
腾讯云数据库 PostgreSQL。
执行 DTS 同步任务的账号需要具备源数据库的权限:Event Trigger、Replication、CREATE、DROP、ALTER、SELECT、UPDATE、INSERT、DELETE。
执行 DTS 同步任务的账号需要具备目标数据库的权限:CREATE、DROP、ALTER、SELECT、UPDATE、INSERT、DELETE。
注意事项
DTS 在执行全量数据同步时,会占用一定的源端实例资源,可能会导致源实例负载上升,增加数据库自身压力。如果您数据库配置过低,建议您在业务低峰期进行操作。
默认采用无锁方式,同步过程中对源库不加全局锁。
数据同步时,DTS 会使用执行同步任务的账号在源库中建立 postgres.public.identify、{database}.__tencentdb__sync_*.* 来记录任务状态、配置信息,目标实例会使用 {database}.__tencentdb__ schema 记录同步状态信息。postgres.public.identify、{database}.__tencentdb__sync_*.*、{database}.__tencentdb__ schema 占用空间非常小,约为源库存储空间的千分之一到万分之一 ,所以对源库的性能无影响,也不会抢占资源。
应用限制
1. 不支持如下对象的同步:ROLE、PROCEDURE、TRIGGER、FUNCTION、RULE 等。
2. 不支持公共对象和权限变更同步。
3. 全量阶段结构初始化不支持外键导入,会自动移除外键约束后导入。
4. 数据同步不支持 FOREIGN TABLE 表类型,全量阶段导出导入不支持 TEMPORARY TABLE,增量同步阶段仅支持 UNLOGGED TABLE 数据结构同步。
5. 当数据同步任务启动前的校验阶段进行插件检测时,检查到第一个不匹配的插件发出告警后,不再继续检测剩余的插件。
6. 因同步任务依赖 max_replication_slots 参数(每个数据库配置同步任务时占用一个 replication_slots),可通过 SQL 语句 select * from pg_replication_slots查看已使用情况,如果已配置同步库数量 + replication_slots > max_replication_slots,新建同步任务会失败,需要用户主动结束任务后系统才会释放replication_slots(失败任务未结束不会释放replication_slots)。
7. 源实例带时区的字段(timestamp with time zone)同步到目标实例后,会自动转为目标实例时区的对应值。
8. 源库发生 HA 等操作导致源实例主节点发生迁移会引起 WAL 日志变化,原同步任务会失败,需要清理目标库已同步的数据,然后重新建立同步任务。
9. 源库在增量阶段对 SEQUENCE 对象更新,同步到目标库后不支持对 SEQUENCE 的 last_value 的刷新,可能需要用户自行检查同步结果,并手动修改目标库上的取值。
10. 源库的对象同步目标端后,对象 owner 会改为目标库账号。例如之前表1的 owner 为 A,目标库使用 B 账号进行同步,则写入到目标库后表1的 owner 改为 B。
操作限制
同步过程中请勿进行如下操作,否则会导致同步任务失败。
请勿修改、删除源数据库和目标数据库中的用户信息(包括用户名、密码和权限)和端口号。
增量同步阶段同时高并发的 DDL 和 DML 操作可能会存在数据冲突,建议减少增量阶段的 DDL。
请勿在源库上执行清除 WAL 的操作。
在同步增量阶段,请勿删除系统库和 schema postgres.public.identify、__tencentdb__sync_*.* 、{database}.__tencentdb__ schema。
源和目标数据库类型为腾讯云数据库时,请勿修改数据库实例的网络,如发生源实例和目标实例网络变更,导致原 VIP 被删除,同步任务失败、或保持运行中状态不变(此时同步已不再工作),这种情况,同步任务无法重试,需要手动结束该任务后重新建立新的同步任务。
支持同步的 SQL 操作
|
DML | INSERT、UPDATE、DELETE |
DDL | CREATE DATABASE、DROP DATABASE、ALTER DATABASE、CREATE SCHEMA、DROP SCHEMA、CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE VIEW、DROP VIEW、CREATE INDEX、DROP INDEX、CREATE SEQUENCE、DROP SEQUENCE |
说明:
暂不支持 CREATE TABLE 表名 AS SELECT 语句。
暂不支持 Where 条件过滤的 SQL 过滤策略。
同步支持的数据类型
Aclitem、Bit、Bool、Box、Bpchar、Bytea、Char、Cid、Cidr、Circle、Date、Float4、Float8、Inet、Int2、Int4、Int8、Interval、Json、Jsonb、Jsonpath、Line、Lseg、Macaddr、Name、Numeric、Oid、Path、Point、Polygon、Record、Text、Tid、Time、Timestamp、Timestamptz、Unknown、Uuid、Varbit、Varchar、XID、Daterange、Int4range、Int8range、Numrange、Tsrange、Tstzrange、Datemultirange、Int4multirange、Int8multirange、Nummultirange、
Tsmultirange、Tstzmultirange、XML、Money、Time with time zone、Tsvector、Tsquery、pg_lsn、txid_snapshot。
环境要求
|
源数据库要求 | 源库和目标库网络能够连通。 源库参数要求如下: wal_level 参数设置为 logical。 源库需满足:待同步库数量 + replication_slots <= max_replication_slots。 源库对象需要设置不区分大小写。 源库中的表必须含有主键或者联合主键。 |
目标数据库要求 | 目标库的版本必须大于等于源库的版本。 目标库需要有足够的存储空间,如果初始类型选择“全量数据初始化”,则目标库的空间大小须是源库待同步库表空间的1.2倍以上。 目标库不能有和源库同名的表、视图等同步对象。 |
操作步骤
|
计费模式 | 支持包年包月和按量计费。 |
源实例类型 | 选择 PostgreSQL,购买后不可修改。 |
源实例地域 | 选择源实例所在地域,购买后不可修改。 |
目标实例类型 | 选择 PostgreSQL,购买后不可修改。 |
目标实例地域 | 选择目的实例所在地域,购买后不可修改。 |
规格 | 请根据业务诉求选择规格,规格越高,性能越好。详情请参考 计费概述。 |
2. 购买完成后,返回数据同步列表,可看到刚创建的数据同步任务,刚创建的同步任务需要进行配置后才可以使用。
3. 在数据同步列表,单击操作列的配置,进入配置同步任务页面。
4. 在配置同步任务页面,配置源端实例、账号密码,配置目标端实例、账号和密码,测试连通性后,单击下一步。
因源数据库部署形态和接入类型的交叉场景较多,各场景同步操作步骤类似,如下仅提供典型场景的配置示例,其他场景请用户参考配置。
示例一:本地自建数据库通过专线/VPN 方式同步至腾讯云数据库。
|
任务设置 | 任务名称 | DTS 会自动生成一个任务名称,用户可以根据实际情况进行设置。 |
| 运行模式 | 支持立即执行和定时执行两种模式。 |
源实例设置 | 源实例类型 | 购买时所选择的源实例类型,不可修改。 |
| 源实例地域 | 购买时选择的源实例所在地域,不可修改。 |
| 接入类型 | 公网:源数据库可以通过公网 IP 访问。 专线接入:源数据库可以通过 专线接入 方式与腾讯云私有网络打通。 VPN接入:源数据库可以通过 VPN 连接 方式与腾讯云私有网络打通。 云数据库:源数据库属于腾讯云数据库实例。 云联网:源数据库可以通过 云联网 与腾讯云私有网络打通。 |
| 私有网络专线网关/VPN 网关 | 专线接入时只支持私有网络专线网关,请确认网关关联网络类型。
VPN 网关,请选择通过 VPN 网关接入的 VPN 网关实例。 |
| 私有网络 | 选择私有网络专线网关和 VPN 网关关联的私有网络和子网。 |
| 主机地址 | 源实例 MySQL 访问 IP 地址或域名。 |
| 端口 | 源实例 MySQL 访问端口。 |
| 账号 | 源实例账号,账号权限需要满足要求。 |
| 密码 | 源实例账号的密码。 |
目标实例设置 | 目标实例类型 | 购买时选择的目标实例类型,不可修改。 |
| 目标实例地域 | 购买时选择的目标实例地域,不可修改。 |
| 接入类型 | 根据您的场景选择,本场景选择“云数据库”。 |
| 实例 ID | 选择目标实例 ID。 |
| 账号 | 目标实例账号,账号权限需要满足要求。 |
| 密码 | 目标实例账号的密码。 |
示例二:腾讯云数据库同步至腾讯云数据库
|
任务设置 | 任务名称 | DTS 会自动生成一个任务名称,用户可以根据实际情况进行设置。 |
| 运行模式 | 支持立即执行和定时执行两种模式。 |
源实例设置 | 源实例类型 | 购买时所选择的源实例类型,不可修改。 |
| 源实例地域 | 购买时选择的源实例所在地域,不可修改。 |
| 接入类型 | 请根据您的场景选择,本场景选择“云数据库”,不同接入类型的准备工作请参考准备工作概述。 公网:源数据库可以通过公网 IP 访问。 专线接入:源数据库可以通过 专线接入 方式与腾讯云私有网络打通。 VPN 接入:源数据库可以通过 VPN 连接 方式与腾讯云私有网络打通。 云数据库:源数据库属于腾讯云数据库实例。 云联网:源数据库可以通过 云联网 与腾讯云私有网络打通。 |
| 实例 ID | |
| 账号 | 源实例账号,账号权限需要满足要求。 |
| 密码 | 源实例账号的密码。 |
目标实例设置 | 目标实例类型 | 购买时选择的目标实例类型,不可修改。 |
| 目标实例地域 | 购买时选择的目标实例地域,不可修改。 |
| 接入类型 | 根据您的场景选择,本场景选择“云数据库”。 |
| 实例 ID | 选择目标实例 ID。 |
| 账号 | 目标实例账号,账号权限需要满足要求。 |
| 密码 | 目标实例账号的密码。 |
示例三:将第三方云厂商 PostgreSQL 通过公网方式同步至腾讯云数据库。
|
任务设置 | 任务名称 | DTS 会自动生成一个任务名称,用户可以根据实际情况进行设置。 |
| 运行模式 | 支持立即执行和定时执行两种模式。 |
源实例设置 | 源实例类型 | 购买时所选择的源实例类型,不可修改。 |
| 源实例地域 | 购买时选择的源实例所在地域,不可修改。 |
| 接入类型 | 对于第三方云厂商数据库,一般可以选择公网方式,也可以选择 VPN 接入,专线或者云联网的方式,需要根据实际的网络情况选择。 本场景选择“公网”,不同接入类型的准备工作请参考 准备工作概述。 公网:源数据库可以通过公网 IP 访问。 专线接入:源数据库可以通过 专线接入 方式与腾讯云私有网络打通。 VPN 接入:源数据库可以通过 VPN 连接 方式与腾讯云私有网络打通。 云数据库:源数据库属于腾讯云数据库实例。 云联网:源数据库可以通过 云联网 与腾讯云私有网络打通。 |
| 主机地址 | 源实例访问 IP 地址或域名。 |
| 端口 | 源实例端口。 |
| 账号 | 源实例账号,账号权限需要满足要求。 |
| 密码 | 源实例账号的密码。 |
目标实例设置 | 目标实例类型 | 购买时选择的目标实例类型,不可修改。 |
| 目标实例地域 | 购买时选择的目标实例地域,不可修改。 |
| 接入类型 | 根据您的场景选择,本场景选择“云数据库”。 |
| 实例 ID | 选择目标实例 ID。 |
| 账号 | 目标实例账号,账号权限需要满足要求。 |
| 密码 | 目标实例账号的密码。 |
5. 在设置同步选项和同步对象页面,将对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步。
说明:
当初始化类型仅选择全量数据初始化,系统默认用户在目标库已经创建了表结构,不会进行表结构同步,也不会校验源库和目标库是否有同名表,所以当用户同时在已存在同名表中选择前置校验并报错,则校验并报错功能不生效。
如果用户在同步过程中确定会对某张表使用 rename 操作(例如将 table A rename 为 table B),则同步对象需要选择 table A 所在的整个库(或者整个实例),不能仅选择 table A,否则 rename 操作后,table B 的数据不会同步到目标库。
|
数据初始化选项 | 初始化类型 | 结构初始化:同步任务执行时会先将源实例中表结构初始化到目标实例中。 全量数据初始化:同步任务执行时会先将源实例中数据初始化到目标实例中。仅选择全量数据初始化的场景,用户需要提前在目标库创建好表结构。 默认两者都勾上,可根据实际情况取消。 |
| 已存在同名表 | 前置校验并报错:存在同名表则报错,流程不再继续。 忽略并继续执行:全量数据和增量数据直接追加目标实例的表中。 |
数据同步选项 | 冲突处理机制 | 冲突报错:在同步时发现表主键冲突,报错并暂停数据同步任务。 冲突忽略:在同步时发现表主键冲突,保留目标库主键记录。 冲突覆盖:在同步时发现表主键冲突,用源库主键记录覆盖目标库主键记录。 |
| 同步操作类型 | 支持操作:Insert、Update、Delete、DDL。当前不支持 “DDL 自定义”。 |
同步对象选项 | 源实例库表对象 | 选择待同步的对象,支持基础库表、视图。高级对象仅支持 SEQUENCE。 |
6. 在校验任务页面,完成校验并全部校验项通过后,单击启动任务。
如果校验任务不通过,可以参考 校验不通过处理方法 修复问题后重新发起校验任务。 失败:表示校验项检查未通过,任务阻断,需要修复问题后重新执行校验任务。
警告:表示检验项检查不完全符合要求,可以继续任务,但对业务有一定的影响,用户需要根据提示自行评估是忽略警告项还是修复问题再继续。
7. 返回数据同步任务列表,任务开始进入运行中状态。
说明:
选择操作列的更多 > 结束可关闭同步任务,请您确保数据同步完成后再关闭任务。
8. (可选)您可以单击任务名,进入任务详情页,查看任务初始化状态和监控数据。
本页内容是否解决了您的问题?