PostgreSQL 逻辑复制搭建

文章目录

    • 前言
    • 1. 环境准备
      • 1.1 环境介绍
      • 1.2 发布端参数配置
      • 1.3 订阅端参数配置
    • 2. 逻辑复制搭建
      • 2.1 创建逻辑复制用户
      • 2.2 发布节点造测试表
      • 2.3 发布节点授权
      • 2.4 创建 PUBLICATION
      • 2.5 订阅节点
      • 2.6 添加复制表
      • 2.7 删除复制任务

前言

本篇文章介绍 PostgreSQL 的搭建过程,原理以及维护相关内容将在下一篇文章中介绍。

1. 环境准备

1.1 环境介绍

角色主机名IP端口数据库名用户版本
发布端172-16-104-7172.16.104.75432pubdbreplcPostgreSQL 12
订阅端172-16-104-56172.16.104.565432subdbreplcPostgreSQL 12

操作系统:CentOS Linux release 7.8.2003 (Core)

1.2 发布端参数配置

postgresql.conf 中的设置:

# 数据库监听
listen_addresses = '*'# WAL 的等级,若要开启逻辑复制,必须设置 logical 让数据库记录逻辑解码所需的信息,所以低于该级别逻辑复制不能工作。
wal_level = logical# 数据库复制槽的数量
max_replication_slots = 8# 由于每个订阅都会占用主库一个 WAL 发送进程,因此参数设置值必须大于 max_replication_slots + 物理备库数量
max_wal_senders = 10

pg_hba.conf 中的设置:

host    all             replc           172.16.104.56/22        md5

上面这行配置的含义是,允许用户 replc 从 172.16.104.56/22 的网络上发起到本数据库的流复制连接,使用 MD5 的密码认证。

1.3 订阅端参数配置

postgresql.conf 中的设置:

# 数据库监听
listen_addresses = '*'# WAL 的等级,若要开启逻辑复制,必须设置 logical 让数据库记录逻辑解码所需的信息,所以低于该级别逻辑复制不能工作。
wal_level = logical# 数据库复制槽的数量,
max_replication_slots = 8# 设置逻辑复制进程数,应大于订阅节点的数量,并且给表同步预留一些进程数量。
max_logical_replication_workers = 10

2. 逻辑复制搭建

2.1 创建逻辑复制用户

在发布端创建逻辑复制专用用户:

create user replc replication login connection limit 8 password 'rep';

用于逻辑复制的用户,必须是 replication 角色,或是 superuser 角色。

2.2 发布节点造测试表

创建一个库专用于逻辑复制搭建测试:

postgres=# create database pubdb;
CREATE DATABASEpostgres=# \c pubdb replc;
You are now connected to database "pubdb" as user "replc".pubdb=> create table tt(id int4 primary key, name text);
CREATE TABLEpubdb=> insert into tt values (1, 'a');
INSERT 0 1

2.3 发布节点授权

刚才创建的逻辑复制用户,仅拥有 replication 角色权限还不够,需要授予表的只读权限:

# 要创建发布,必须要拥有该库的 create 权限
grant connect, create  on database pubdb to replc;grant usage on schema public to replc;grant select on tt to replc;

现在 replc 用户已经拥有 tt 测试表的只读权限。

2.4 创建 PUBLICATION

发布端创建发布任务:

create PUBLICATION pub1 FOR TABLE tt;

如果需要多张表,则表名间使用逗号分隔,如果需要发布所有表,将 FOR TABLE 调整为 FOR ALL TABLES 即可。查看发布任务可以使用下方 SQL:

select * from pg_publication;

输出的结果:

  oid  | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate 
-------+---------+----------+--------------+-----------+-----------+-----------+-------------24876 | pub1    |    24866 | f            | t         | t         | t         | t
  • pubname:发布任务名称。
  • pubowner:指发布属组,可以和 pg_user 视图的 usesysid 相关联。
  • puballtables:是否发布数据库中所有表,t 表示发布数据库中所有已存在的表和以后新建的表。
  • pubinsert:如果为 t 表示发布表中的 INSERT 操作。
  • pubupdate:如果为 t 表示发布表中的 UPDATE 操作。
  • pubdelete:如果为 t 表示发布表中的 DELETE 操作。
  • pubtruncate:如果为 t 表示发布表中的 TRUNCATE 操作。

2.5 订阅节点

# 创建订阅节点的库名
create database subdb;# 创建用户
create user replc replication login connection limit 8 password 'rep';# 切换至 replc
\c subdb replc# 创建表
create table tt(id int4 primary key, name text);# 创建订阅任务,注意该步骤必须使用 superuser 角色账号
create subscription sub1 connection 'host=172.16.104.7 port=5432 dbname=pubdb user=replc password=rep' PUBLICATION pub1;

执行结果:

subdb=# create subscription sub1 connection 'host=172.16.104.7 port=5432 dbname=pubdb user=replc password=rep' PUBLICATION pub1;
NOTICE:  created replication slot "sub1" on publisher
CREATE SUBSCRIPTION

此时在订阅节点可以查到订阅任务信息:

select * from pg_subscription;
  oid  | subdbid | subname | subowner | subenabled |                           subconninfo                            | subslotname | subsynccommit | subpublications 
-------+---------+---------+----------+------------+------------------------------------------------------------------+-------------+---------------+-----------------24887 |   24878 | sub1    |       10 | t          | host=172.16.104.7 port=5432 dbname=pubdb user=replc password=rep | sub1        | off           | {pub1}

创建成功后,就可以在发布端查到任务运行情况:

select * from pg_replication_slots;
 slot_name |  plugin  | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 
-----------+----------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------sub1      | pgoutput | logical   |  24867 | pubdb    | f         | t      |     108314 |      |          796 | 6/7000270   | 6/70002A8

2.6 添加复制表

经过上面的操作,我们已经成功配置 tt 表的发布与订阅,假设此时又有新需求,再添加一张表,如何操作呢?

首先,在发布节点创建测试表:

# 创建测试表
create table t2(id int4 primary key, name text);# 写入测试数据
insert into t2 values (1, 'a'),(2, 'b'),(3, 'c');

将该表授权给 replc 账号:

grant select on t2 to replc;

将该表添加到发布列表:

ALTER PUBLICATION pub1 ADD TABLE t2;

查看发布任务表信息:

select * from pg_publication_tables;

输出:

 pubname | schemaname | tablename 
---------+------------+-----------pub1    | public     | ttpub1    | public     | t2

现在开始配置订阅端:

# 创建表结构
create table t2(id int4 primary key, name text);

订阅端执行刷新任务操作:

ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION;

订阅端查看数据:

subdb=# select * from t2;id | name 
----+------1 | a2 | b3 | c

至此,表 t2 已成功添加到逻辑复制任务中。

2.7 删除复制任务

DROP SUBSCRIPTION sub1;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/80172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux抓包工具tcpdump

一、介绍 tcpdump是一个抓包工具,用于实时捕获和分析网络流量。它通常在unix和linux操作系统上使用。tcpdump能够捕获流经网络接口的数据包,并显示或保存它们以供进一步分析。它提供有关每个数据包的详细信息,包括源IP地址、目标IP地址、使用…

EDA(Exploratory Data Analysis)探索性数据分析

EDA(Exploratory Data Analysis)中文名称为探索性数据分析,是为了在特征工程或模型开发之前对数据有个基本的了解。数据类型通常分为两类:连续类型和离散类型,特征类型不同,我们探索的内容也不同。 1. 特征类型 1.1 连续型特征 …

每日一题(两数相加)

每日一题(两数相加) 2. 两数相加 - 力扣(LeetCode) 思路 思路: 由于链表从头开始向后存储的是低权值位的数据,所以只需要两个指针p1和p2,分别从链表的头节点开始遍历。同时创建一个新的指针new…

全球汽车安全气囊芯片总体规模分析

安全气囊系统是一种被动安全性的保护系统,它与座椅安全带配合使用,可以为乘员提供有效的防撞保护。在汽车相撞时,汽车安全气囊可使头部受伤率减少25%,面部受伤率减少80%左右。 汽车安全气囊芯片是整个系统的控制核心,并…

给微信小程序添加隐私协议

前些日子,微信官方针对用户的安全信息又进行了增强,这次更新几乎要求所有的小程序都需要进行整改,只要是涉及到用户的隐私的小程序都需要进行整改,这次整改是强制性的。 点开相关指引之后会跳转到下面的链接:参考链接…

【深度学习】Pytorch 系列教程(十一):PyTorch数据结构:3、变量(Variable)介绍

目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、张量(Tensor) 2、张量操作(Tensor Operations) 3、变量(Variable) 一、前言 ChatGPT: PyTorch是一个开源的机器学习框架&am…

主题配置和 消息发送(一)KafkaTemplate 的使用

一、主题 1.1、配置主题 在应用程序上下文定义一个 KafkaAdmin Bean, 它可以自动将主题添加到代理。通过这个Bean可以将 每一个新建的主题 Topic 添加到应用程序上下文中。下面是一个简单的示例:也可以创建 TopicBuilder 类,使用它创建 Bean 更加简单。 @Bean public Kafka…

C++:string的模拟实现

目录 1.string的四大默认函数 1.1构造函数 1.2析构函数 1.3拷贝构造 1.4赋值运算符重载 2.访问string的三种方式 2.1[]访问 2.2迭代器访问 2.3范围for(本质是迭代器) 3.string相关功能的实现 3.1modify 3.2capacity 3.3access 3.4relations 3.5补充 4.补充 1.s…

C++之哈希表、哈希桶的实现

哈希表、哈希桶的实现 哈希概念哈希冲突哈希函数哈希冲突解决闭散列哈希表闭散列实现哈希表的结构哈希表的插入哈希表的查找哈希表的删除 开散列开散列概念哈希表的结构哈希表的插入哈希表的查找哈希表的删除 哈希概念 顺序结构以及平衡树中,元素关键码与其存储位置…

git everything up-to-date解决方法

git push origin master 总是提示git everything up-to-date,原因是远端没有分支 . 操作如下:(1)查看当前分支名 git branch -av(2)git push --set-upstream origin (当前分支名)

Linux-相关操作

2.2.2 Linux目录结构 /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始&#xf…

P2239 [NOIP2014 普及组] 螺旋矩阵

题目链接&#xff1a; 找到矩阵元素与 n , i , j \rm n, i, j n,i,j之间的关系&#xff0c;然后直接输出 #include <bits/stdc.h>using namespace std;int find(int n, int i, int j) {if (i 1) return j;if (j n) return i n - 1;if (i n) return 3 *n - 1 - j;if …

广州xx策划公司MongoDB恢复-2023.09.09

2023.09.08用户的MongoDB数据库被勒索病毒攻击&#xff0c;数据全部被清空。 提示&#xff1a; mongoDB的默认端口为27017&#xff0c;黑客通常通过全网段扫描27017是否开放判断是否是MongoDB服务器。一旦发现27017开放&#xff0c;黑客就会用空密码、弱密码尝试连接数据库。黑…

Mojo-SDK详细安装教程

Mojo-SDK安装 运行环境&#xff1a;windows11wsl2&#xff08;ubuntu1804&#xff09; 官方推荐&#xff1a;wsl2&#xff08;ubuntu2204&#xff09;&#xff0c;我下面是wsl2&#xff08;ubuntu1804&#xff09;&#xff0c;发现有些问题&#xff0c;不知道是不是ubuntu版本问…

opencv dnn模块 示例(16) 目标检测 object_detection 之 yolov4

博客【opencv dnn模块 示例(3) 目标检测 object_detection (2) YOLO object detection】 测试了yolov3 及之前系列的模型&#xff0c;有在博客【opencv dnn模块 示例(15) opencv4.2版本dnn支持cuda加速&#xff08;vs2015异常解决&#xff09;】 说明了如何使用dnn模块进行cuda…

kafka 3.5 主题分区ISR伸缩源码

ISR(In-sync Replicas)&#xff1a;保持同步的副本 OSR(Outof-sync Replicas)&#xff1a;不同步的副本。最开始所有的副本都在ISR中&#xff0c;在kafka工作的过程中&#xff0c;如果某个副本同步速度慢于replica.lag.time.max.ms指定的阈值&#xff0c;则被踢出ISR存入OSR&am…

(1)输入输出函数:cin和cout(2)数学函数:sqrt、pow、sin、cos、tan等

输入输出函数&#xff1a;cin 和 cout 在C编程语言中&#xff0c;为了与用户进行交互和显示程序的结果&#xff0c;我们使用了两个非常重要的函数&#xff1a;cin 和 cout。这两个函数分别用于输入和输出。 cin是C中的标准输入流对象&#xff0c;它用于从键盘接收用户的输入。…

SQL12 高级操作符练习(2)

描述 题目&#xff1a;现在运营想要找到学校为北大或GPA在3.7以上(不包括3.7)的用户进行调研&#xff0c;请你取出相关数据&#xff08;使用OR实现&#xff09; 示例&#xff1a;user_profile iddevice_idgenderageuniversitygpa12138male21北京大学3.423214male复旦大学4.03…

六、不root不magisk不xposed lsposed frida原生修改定位

前言常用风控APP检测1.Aida64检测2.momo检测3.微霸检测4.cellular-z检测 厂商测试总结 前言 不root不戴面具 不xposed lsposed frida&#xff0c;不分身&#xff0c;不多开&#xff0c;最完美的原生修改定位。 常用风控APP检测 先看效果再说原理&#xff0c;先过一遍环境 1.Ai…

聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化

聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化 目录 聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于自组织特征映射聚类算法(SOM)的数据聚类可视化 可直接运行 注释清晰 Matlab语言 1.多特征输入&…