暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss逻辑复制增强

原创 风一样自由 2024-11-12
213

一、功能介绍

openGauss提供了逻辑解码功能,通过反解xlog的方式生成逻辑日志。目标数据库解析逻辑日志以实时进行数据复制。


openGauss数据库正式推出6.0版本之后,较之前版本逻辑复制正式支持DDL操作,具体支持如下DDL操作:

CREATE/DROP/ALTER/TRUNCATE/RENAME TABLE | TABLE PARTITION | TABLE SUBPARTITION

CREATE/ALTER/DROP INDEX

CREATE/ALTER/DROP VIEW

CREATE/ALTER/DROP/REFRESH [INCREMENTAL] MATERIALIZED VIEW

CREATE/ALTER/DROP TYPE

CREATE/ALTER/DROP FUNCTION

CREATE/ALTER/DROP PROCEDURE

CREATE/ALTER/DROP TRIGGER

CREATE/DROP PACKAGE

CREATE/DROP SCHEMA

CREATE/DROP SEQUENCE

COMMENT/GRANT/REVOKE

二、环境搭建

IP

主机名

版本

端口

发布端(源端)

192.168.57.100

yf1

openGauss 6.0.0

15400

订阅端(目标端)

192.168.57.101

yf2

openGauss 6.0.0

15400


1.修改配置文件postgresql.conf(发布端、订阅端)

wal_level=logical

注:修改完后需重启。

2.创建逻辑复制用户(发布端)

CREATE USER repl REPLICATION SYSADMIN LOGIN ENCRYPTED PASSWORD 'repl@123';

注:用户需具有SYSADMIN、REPLICATION权限用户。

3.在pg_hba.conf配置文件中添加如下配置参数(发布端)

host  replication  repl  0.0.0.0/0 sha256

注:修改完后需重启。

4.创建数据库(发布端)

create database source_db;

5.执行加密操作(订阅端)

gs_guc generate -S Aa123456 -D $GAUSSHOME/bin -o subscription

6.创建数据库(订阅端)

create database target_db;

三、功能测试

1.创建测试表(发布端、订阅端)

create table logical_tb1(col1 int,col2 varchar(10),col3 timestamp);


2.创建发布(发布端)

CREATE PUBLICATION pub1 FOR ALL TABLES with(publish='insert,update,delete,truncate',ddl='all');


3.查询发布(发布端)

SELECT * FROM pg_publication;


4.创建订阅(订阅端)

CREATE SUBSCRIPTION sub1 CONNECTION 'host=192.168.57.100 port=15400 user=repl dbname=source_db password=repl@123' PUBLICATION pub1;


注:端口号不能使用主端口,应该使用主端口+1端口,否则会与线程池冲突。

5.查询订阅(订阅端)

SELECT * FROM pg_subscription;


6.刷新订阅(订阅端)

ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION;  


7.插入数据(发布端)

INSERT INTO logical_tb1 values(1,'yyf','2024-11-12'),(2,'jjj','2024-11-12'),(3,'yyz','2024-11-12');


8.执行ALTER TABLE删除列操作(发布端)

ALTER TABLE logical_tb1 drop COLUMN col3;


9.执行ALTER TABLE修改列名操作(发布端)

ALTER TABLE logical_tb1 rename COLUMN col2 to col4;


10.执行ALTER TABLE新增列操作(发布端)

ALTER TABLE logical_tb1 add COLUMN col5 varchar(10);


11.查询复制结果(订阅端)

select * from logical_tb1;


四、限制

只支持行存表的DDL操作。

不支持列存,Ustore存储引擎。

TYPE仅支持复合类型和枚举类型。

在订阅端手动删除表会导致DDL同步失败,发布订阅阻塞。

不支持在对表进行相关的表结构操作中调用VOLATILE函数。

在逻辑复制中使用ALTER TABLE时会有如下限制:

当ALTER TABLE修改表字段类型,使用USING子句设置字段值时,要求表上必须有replication identity字段,并且USING子句修改的表字段不为该标识符字段。

当ALTER TABLE修改或新增表字段为AUTO_INCREMENT自增列时,要求表上必须有replication identity字段,并且USING子句修改的表字段不为该标识符字段。

当ALTER TABLE新增表字段,并且表字段类型不为内置类型,即需要每个元组都重新计算其默认值,要求表上必须设置replication identity。

五、总结

通过以上测试,openGauss6.0版本在原有版本基础上逻辑复制功能新增支持DDL功能,突破DDL同步限制,使得openGauss逻辑复制功能更丰富、强大,在实际应用中发挥巨大作用。

最后修改时间:2024-11-13 08:56:03
文章转载自风一样自由,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论