本文为 【TDSQL-PG笔记】主从复制原理的系列文章,实验基础环境参考栏目第一篇blog
如果要将不同库的某关键表备份到指定库里,可以用逻辑复制完成相关功能。
逻辑复制基本概念
PG逻辑复制基于发布和订阅模型,一个发布可以有多个订阅者。
发布publication可以创建在任意单机上,也可以在物理复制的主库上,发布端要求数据库参数WAL_LEVEL为logical。一个发布可以被多个数据库订阅。一个发布只能包含一个数据库中的表,但是这些表可以分布在不同的schema下。
订阅处于逻辑复制的下游端,一个订阅只能对应一个发布。订阅端的数据库名可以跟发布端不同,但是订阅发布的表名和schema必须相同。
当订阅创建成功后,就会自动在发布端创建多个逻辑复制槽,其中一个用于后续的增量数据同步,永久保留,另外还会创建一个或者多个的临时复制槽,用于复制表的全量快照数据。
是当发布端是物理复制架构时,如果发生主从切换,发布是不会跟随数据库failover的。但是可以通过手工拷贝文件或者利用插件实现。
逻辑复制的限制
(1)数据库的表结构不会被复制,所以需要在订阅端先创建对应的schema和表
(2)TRUNCATE和DDL不会复制,如果要进行DDL变更,需要先在订阅端执行DDL,然后在发布端执行。
(3)Sequence不会不复制,当发布端使用了sequence数据,其写入了表的值会同步到订阅端,但是目标库的sequence并不会发生变化。
(4)不支持大对象。
(5)复制只能是基表到基表,不支持视图、物化视图、外部表等。如果表是分区表,需要基于分区进行复制。
测试
- 发布和订阅端都新建相同的表t1,t2
- 发布端为t1创建发布
- 订阅端为t1创建订阅
新建一个库,做为订阅端
[pg@localhost data]$ pg_ctl init -D /data/db3
发布与订阅端都建相关同步结构的表t1,t2
postgres=# create table t1(id int,name varchar(20));
CREATE TABLE
postgres=# create table t2(id int,name varchar(20));
CREATE TABLE
在发布端为t1创建发布
<

本文详细介绍了TDSQL-PG中的逻辑复制机制,包括发布与订阅模型,表结构限制,如不复制DDL和表结构变化,以及如何设置REPLICAIDENTITY。通过实际操作展示了如何在发布和订阅端创建表并进行数据同步的过程。

320

被折叠的 条评论
为什么被折叠?



