外贸网站分类,做网站什么用,廊坊网站建设推广,网站关键字怎么修改文章目录 前言1. 环境准备1.1 环境介绍1.2 发布端参数配置1.3 订阅端参数配置 2. 逻辑复制搭建2.1 创建逻辑复制用户2.2 发布节点造测试表2.3 发布节点授权2.4 创建 PUBLICATION2.5 订阅节点2.6 添加复制表2.7 删除复制任务 前言
本篇文章介绍 PostgreSQL 的搭建过程#xff… 文章目录 前言1. 环境准备1.1 环境介绍1.2 发布端参数配置1.3 订阅端参数配置 2. 逻辑复制搭建2.1 创建逻辑复制用户2.2 发布节点造测试表2.3 发布节点授权2.4 创建 PUBLICATION2.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 10pg_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 102. 逻辑复制搭建
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 12.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 | tpubname发布任务名称。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 host172.16.104.7 port5432 dbnamepubdb userreplc passwordrep PUBLICATION pub1;执行结果
subdb# create subscription sub1 connection host172.16.104.7 port5432 dbnamepubdb userreplc passwordrep 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 | host172.16.104.7 port5432 dbnamepubdb userreplc passwordrep | 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/70002A82.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;