重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 541|回复: 0
打印 上一主题 下一主题

如何使用 pg16 逻辑复制实现零宕机升级

[复制链接]
跳转到指定楼层
楼主
发表于 2024-5-15 16:46:05 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

                               
登录/注册后可看大图


1.环境
   源端(发布端):192.168.133.191 ,端口 5432   
   目的端(订阅端):192.168.133.192 ,端口5432

2.发布节点配置文件
  postgresql.conf :
    wal_level = logical
    listen_addresses = '*'
    max_replication_slots = 8  
    max_wal_senders = 10

    pg_hba.conf:  
    host    repuser  all   192.168.133.192/32     trust

   重启配置生效


3.导出表结构

  pg_dump -d zlcost -s >/u01/postgresql/pgdata/zlcost.sql

4.查询迁移的数据库中没有主键的表
  SELECT n.nspname AS "Schema",c.relname AS "TableName"
   FROM pg_catalog.pg_class c, pg_namespace n
  where c.relnamespace = n.oid
    AND n.nspname NOT IN ('information_schema', 'pg_catalog')
    AND c.relkind='r'
    AND not exists (select 1 from pg_index i where c.oid=i.indrelid andi.indisprimary='t');



5.将没有主键的表增加REPLICAIDENTITY FULL

  ALTER TABLE     t        REPLICA IDENTITY FULL;
  ALTER TABLE     toast_t1  REPLICA IDENTITY FULL;
  ALTER TABLE     prod      REPLICAIDENTITY FULL;
  ALTER TABLE     test      REPLICAIDENTITY FULL;
  ALTER TABLE     tt        REPLICAIDENTITY FULL;


6.在目标端创建数据库,并导入表结构


  postgres=# create database zlcost;
  postgres=# create user sztech password 'sztech';
  postgres=# alter user sztech Superuser;



  psql -d zlcost -f /tmp/zlcost.sql

7.发布节点创建复制用户
    复制用户必须有复制角色,或者SUPERUSER角色

   CREATE USER repuser REPLICATION LOGIN CONNECTION LIMIT 10  ENCRYPTED PASSWORD 'repuser';

8.发布节点为复制用户授权
GRANT USAGE ON SCHEMA public,sztech TO repuser ;
GRANT SELECT ON all tables IN SCHEMA public,sztech TO repuser;

\dp+ ;


9.  发布节点创建发布
  可以给具体的表,也可以给所有表,这里给所有表

  zlcost# CREATE PUBLICATION pub1 FOR ALL TABLES ;
  --FOR ALL TABLES:将当前库中所有表添加到发布中,包括以后在这个库中新建的表。这种模式相当于在全库级别逻辑复制所有表。


10.发布节点上查询pg_publication视图
  zlcost# SELECT * FROM pg_publication;


11.  订阅节点创建接收表及订阅
zlcost#  create subscription sub1connection 'host=192.168.133.191 port=5432 dbname=zlcost user=repuserpassword=repuser' publication pub1;

12.发布节点查看复制槽
  SELECT slot_name,plugin,slot_type,database,active,restart_lsn
   FROM pg_replication_slots
  where slot_name='sub1';


13.订阅端查看订阅信息
select * frompg_stat_subscription;



14.订阅端查看当前的数据位置
  select * from pg_replication_origin_status



看到订阅已经完成

15.  发布节点分别向表中插入数据



16.  订阅节点查看逻辑复制效果

看到目标端数据已经同步过来。


附部分命令:
删除订阅
Drop subscription sub1;

删除发布:
drop publication pub1;

手动刷新
ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION;


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-28 18:21 , Processed in 0.092783 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表