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

PG逻辑复制(schema级别同步)

原创 xiaocx 2024-12-09
352

今天搭建 Postgresql 逻辑复制遇到如下问题:

1.创建发布和订阅之后,




问题1:

发布端创建事务槽:

SELECT pg_create_logical_replication_slot('sub_ukcore_slot', 'pgoutput');

调整订阅端的创建语句
CREATE SUBSCRIPTION sub_ukcore CONNECTION 'host=10.30.***.*** port=5432 dbname=ukprod user=repuser password=*****************' PUBLICATION pub_ukcore WITH (copy_data = false, create_slot=false, enabled=false, slot_name=sub_ukcore_slot)

ALTER SUBSCRIPTION sub_ukcore ENABLE; 

问题2:

备机全异常,导致主机夯死,检查集群状态,重启备机节点程序,恢复备机。问题解决。


完整的脚本如下:

/* ********************************* 发布端 ********************************* */
--订阅端修改参数,所有主备都要执行更改
wal_level>=logical
alter system set max_replication_slots=160;
alter system set max_wal_senders=160;

--创建复制用户he授权
create user repuser replication login connection limit 8 password '*****************'; 
grant select on all tables in schema ukcore to repuser;
grant usage on schema public to repuser;
grant connect on database ukprod to repuser;

--创建发布
create publication pub_ukcore for tables in schema ukcore;

--创建事务槽
SELECT pg_create_logical_replication_slot('sub_ukcore_slot', 'pgoutput');

/* ********************************* 订阅端 ********************************* */
--订阅端修改参数,所有主备都要执行更改
alter system set max_replication_slots=160;
alter system set max_logical_replication_workers=32;
alter system set max_worker_processes=64;

--创建用户并授权
create user repuser replication login connection limit 8 password '*****************';
grant all on all tables in schema ukcore to repuser;
grant usage on schema public to repuser;
grant connect on database ukprod to repuser;

CREATE SUBSCRIPTION sub_ukcore CONNECTION 'host=10.30.***.*** port=5432 dbname=ukprod user=repuser password=*****************' 
    PUBLICATION pub_ukcore WITH (copy_data = false, create_slot=false, enabled=false, slot_name=sub_ukcore_slot);
ALTER SUBSCRIPTION sub_ukcore ENABLE; 

/* ********************************* 常用视图 ********************************* */

select * from pg_replication_slots; 
select * from pg_stat_replication;
select * from pg_publication          ;
select * from pg_publication_rel    ;
select * from pg_subscription        ;
select * from pg_subscription_rel  ;

/* ********************************* 注意 ********************************* */
1. DDL语句不同步,发布端执行DDL语句后,订阅端也需要手工执行DDL语句,两端执行完之后如不能继续同步增量,可执行如下语句
alter subscription sub_ukcore refresh publication;

2. synchronous_standby_names 参数
show synchronous_standby_names ;
synchronous_standby_names
------------------------------------------------------------
ANY 1 (pgautofailover_standby_1, pgautofailover_standby_3)
(1 row)
如果该参数如此配置,则俩个物理备库都需要正常,如果两个备都异常,则主库将会夯


3.所同步复制的表需要有主键





「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论