在 Docker 中搭建 PostgreSQL16 主从同步环境
1. 环境搭建
本文介绍了如何在同一台机器上使用 Docker 容器搭建 PostgreSQL 的主从同步环境。通过创建互联网络和配置主库及从库,详细讲解了数据库初始化、角色创建、数据同步和验证步骤。主要步骤包括设置主库的连接信息、创建用于复制的角色、使用 pg_basebackup 同步数据,并最终验证同步状态。
1.1. 主库搭建
# 创建docker容器互联网络
docker network create pg-network# 创建映射目录
mkdir /data/postgresdocker run -d -p 5500:5432 -v /docker-data/pgmaster:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=postgress@123 \
--name pgmaster --network=pg-network postgres:16.4
1.2. 从库搭建
# 创建从库
docker run -d -p 5501:5432 \
-e POSTGRES_PASSWORD=postgress@123 \
--name pgslave1 --network=pg-network postgres:16.4
1.3. 查看主库和从库 IP
# 查看容器IP pgmaster = 172.18.0.2
docker inspect pgmapgmaster = 172.18.0.2ster | grep IPAddress
# pgslave1 = 172.18.0.3
docker inspect pgslave1 | grep IPAddress
1.4. 主库配置
设置主服务的连接信息, 从库使用pg_basebackup
同步过来数据后可以直接使用这个配置去同步数据
# 追加参数 主服务的连接信息, 用于从属服务器读取使用
# SQL用户名和密码 user=repl password=repl
cat >> /docker-data/pgmaster/postgresql.conf <<- 'EOF'
primary_conninfo = 'host=172.18.0.2 port=5432 user=repl password=repl'
EOF
host=172.18.0.2
主库 IP , 这里因为使用了 同一个网络 pg-network, 所以可以直接通信user=repl password=repl
主库数据库中用于同步数据的角色和密码, 等下需要创建
设置只允许哪几个 IP 个角色可以复制数据
# 追加参数, 表示只允许这几个IP的角色repl复制数据
cat >> /docker-data/pgmaster/pg_hba.conf <<- 'EOF'
host replication repl 172.18.0.2/32 md5
host replication repl 172.18.0.3/32 md5
EOF
主库创建用于复制的角色
# 设置账户
docker exec -it pgmaster /bin/bash# 登录
pgsql -U postgres# 关闭异步提交
SET synchronous_commit = off;# 创建 角色名 = repl , 密码 = repl 的账户, 权限为登录和复制
create role repl login replication encrypted password 'repl';# 查看是否创建成功
\du# 退出
\q# ctrl + D 也可以退出
# 重启容器
docker restart pgmaster
# 追加参数 主服务的连接信息, 用于从属服务器读取使用
# SQL用户名和密码 user=repl password=repl
cat >> /docker-data/pgmaster/postgresql.conf <<- 'EOF'
primary_conninfo = 'host=172.18.0.2 port=5432 user=repl password=repl'
EOF# 追加参数, 表示只允许这几个IP的角色repl复制数据
cat >> /docker-data/pgmaster/pg_hba.conf <<- 'EOF'
host replication repl 172.18.0.2/32 md5
host replication repl 172.18.0.3/32 md5
EOF# 设置账户
docker exec -it pgmaster /bin/bash# 登录
pgsql -U postgres
# 关闭异步提交
SET synchronous_commit = off;# 创建 角色名 = repl , 密码 = repl 的账户, 权限为登录和复制
create role repl login replication encrypted password 'repl';# 查看是否创建成功
\du# 退出
\q# ctrl + D 也可以退出
# 重启容器
docker restart pgmaster
1.5. 拷贝主库数据
进入从属容器内部, 使用pg_basebackup 同步主库的数据到从库
# 进入从属容器
docker exec -it pgslave1 /bin/bash
# 同步主服务器数据, 注意 这里的 /docker-data/opt/postgresql-16.0/data 是容器内部的数据
pg_basebackup -Fp --progress -D /docker-data/opt/postgresql-16.0/data/ -R -h 172.18.0.2 -p 5432 -U repl --password
在本地创建目录, 将容器的数据拷贝出来
# 创建目录
mkdir -p /docker-data/opt/postgresql/pgslave1
# 将容器内部的数据复制到外部
docker cp pgslave1:/docker-data/opt/postgresql-16.0/data /docker-data/opt/postgresql/pgslave1
1.6. 重新启动从库
删除容器, 重新启动从库
# 删除容器
docker rm -f pgslave1# 重新开启容器, 注意映射目录
docker run -d -p 5501:5432 \
-e POSTGRES_PASSWORD=postgress@123 \
-v /docker-data/opt/postgresql/pgslave1/data:/var/lib/postgresql/data \
--name pgslave1 --network=pg-network -d postgres:16.4
1.7. 验证
docker logs -f pgslave1
可以看到这里已经开始同步了
或者可以使用 select * from pg_stat_wal_receiver;
create table db_order(id bigint primary key ,name varchar(255)
);insert into db_order(id,name) values (1,'zhangsan');
2. 完整命令
# 创建docker容器互联网络
docker network create pg-network# 创建映射目录
mkdir /data/postgresdocker run -d -p 5500:5432 -v /docker-data/pgmaster:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=postgress@123 \
--name pgmaster --network=pg-network postgres:16.4# 创建从库
docker run -d -p 5501:5432 \
-e POSTGRES_PASSWORD=postgress@123 \
--name pgslave1 --network=pg-network postgres:16.4# 查看容器IP pgmaster = 172.18.0.2
docker inspect pgmapgmaster = 172.18.0.2ster | grep IPAddress
# pgslave1 = 172.18.0.
docker inspect pgslave1 | grep IPAddress# 追加参数 主服务的连接信息, 用于从属服务器读取使用
# SQL用户名和密码 user=repl password=repl
cat >> /docker-data/pgmaster/postgresql.conf <<- 'EOF'
primary_conninfo = 'host=172.18.0.2 port=5432 user=repl password=repl'
EOF# 追加参数, 表示只允许这几个IP的角色repl复制数据
cat >> /docker-data/pgmaster/pg_hba.conf <<- 'EOF'
host replication repl 172.18.0.2/32 md5
host replication repl 172.18.0.3/32 md5
EOF# 设置账户
docker exec -it pgmaster /bin/bash# 登录
pgsql -U postgres
# 关闭异步提交
SET synchronous_commit = off;# 创建 角色名 = repl , 密码 = repl 的账户, 权限为登录和复制
create role repl login replication encrypted password 'repl';# 查看是否创建成功
\du# 退出
\q# ctrl + D 也可以退出
# 重启容器
docker restart pgmaster# 进入从属容器
docker exec -it pgslave1 /bin/bash
# 同步主服务器数据, 注意 这里的 /docker-data/opt/postgresql-16.0/data 是容器内部的数据
pg_basebackup -Fp --progress -D /docker-data/opt/postgresql-16.0/data/ -R -h 172.18.0.2 -p 5432 -U repl --password# 创建目录
mkdir -p /docker-data/opt/postgresql/pgslave1
# 将容器内部的数据复制到外部
docker cp pgslave1:/docker-data/opt/postgresql-16.0/data /docker-data/opt/postgresql/pgslave1# 删除容器
docker rm -f pgslave1# 重新开启容器, 注意映射目录
docker run -d -p 5501:5432 \
-e POSTGRES_PASSWORD=postgress@123 \
-v /docker-data/opt/postgresql/pgslave1/data:/var/lib/postgresql/data \
--name pgslave1 --network=pg-network -d postgres:16.4
能看到 redo starts 说明已经开始同步了
create table db_order(id bigint primary key ,name varchar(255)
);insert into db_order(id,name) values (1,'zhangsan');
查询同步状态
select * from pg_stat_wal_receiver;
相关文章:

在 Docker 中搭建 PostgreSQL16 主从同步环境
1. 环境搭建 本文介绍了如何在同一台机器上使用 Docker 容器搭建 PostgreSQL 的主从同步环境。通过创建互联网络和配置主库及从库,详细讲解了数据库初始化、角色创建、数据同步和验证步骤。主要步骤包括设置主库的连接信息、创建用于复制的角色、使用 pg_basebacku…...

SpringCloud无介绍快使用,sentinel服务熔断功能与持久化(二十四)
TOC 问题背景 从零开始学springcloud微服务项目 注意事项: 约定 > 配置 > 编码IDEA版本2021.1这个项目,我分了很多篇章,每篇文章一个操作步骤,目的是显得更简单明了controller调service,service调dao默认安装ngi…...

判断浏览器环境,前端打开微信浏览器
我们知道微信浏览器有自带针对微信的组件(比如:微信JSAPI支付使用的WeixinJSBridge),那么,有办法在普通浏览器中打开微信浏览器并跳转页面吗?(似乎微信已禁用外部浏览器调用的普通页面直接跳转,只能通过“weixin://前缀…...

【算法笔记】前缀和算法原理深度剖析(超全详细版)
【算法笔记】前缀和算法原理深度剖析(超全详细版) 🔥个人主页:大白的编程日记 🔥专栏:算法笔记 文章目录 【算法笔记】前缀和算法原理深度剖析(超全详细版)前言一.一维前缀和1.1题…...

linux之网络子系统- 地址解析协议arp 源码分析和邻居通用框架
一、arp 的作用 ARP(Address Resolution Protocol,地址解析协议)是将IP地址解析为以太网MAC地址(物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备时,它必须知…...
经典动态规划问题:含手续费的股票买卖【从 O(n) 到 O(1) 的优化解析】
题目理解 我们要在给定的股票价格数组 prices 中进行买卖操作,并尽可能多次交易以获取最大利润。每次交易都需要支付一定的手续费 fee,因此我们必须考虑如何通过合适的交易策略最大化利润。 在本题中,每一天可以选择: 不进行任…...

Python画笔案例-088 绘制 滚动的汉字
1、绘制 滚动的汉字 通过 python 的turtle 库绘制 滚动的汉字,如下图: 2、实现代码 绘制 滚动的汉字,以下为实现代码: """滚动的汉字.py """ import time from turtle import * from write_patch import *width,height...

Redis 5.0 安装配置(Windows)
Redis 5.0之后支持Redis Stream等功能 下载地址:Releases tporadowski/redis GitHub 点击运行redis-server.exe 此外:Redis 6.0及以后版本目前都没有Windows版...
金融行业:办公安全防护专属攻略
在中国金融市场快速迈向数字化转型的进程中,数据安全与隐私保护成为了不容忽视的关键议题。面对不断升级的网络威胁和日益严格的监管要求,构建一个既能支持创新又能提供坚实防护的信息安全体系变得尤为重要。亿格云不断深耕办公安全领域,为金…...
python如何基于numpy pandas完成复杂的数据分析操作?
数据分析是现代数据科学的重要组成部分,Python作为一种强大的编程语言,提供了许多库来简化数据分析过程。 其中,NumPy和Pandas是两个最常用的库。NumPy主要用于数值计算,而Pandas则提供了强大的数据结构和数据分析工具。 本文将深入探讨如何利用这两个库进行复杂的数据分…...
Linux中定时任务调度工具——crontab
1.简介 crontab是Unix和类Unix操作系统(如Linux)中用于定时任务调度的工具。其名称来源于“cron”这个守护进程,它负责周期性地执行任务,并且“tab”表示这个工具的配置文件。用户可以通过配置crontab文件来设定定时任务…...

思维+差分,CF 1884C - Medium Design
目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1884C - Medium Design 二、解题报告 1、思路分析 考虑 最大值 和 最小值…...

简单介绍冯诺依曼体系
现代的计算机, 大多遵守冯诺依曼体系结构 CPU中央处理器:进行算术运算和逻辑判断。存储器:分为外存和内存,用于存储数据(使用二进制方式存储)。输入设备:用户给计算机发号施令。输出设备:计算机…...

kernel32.dll下载地址:如何安全地恢复系统文件
关于从网络上寻找kernel32.dll的下载地址,这通常不是一个安全的做法,而且可能涉及到多种风险。kernel32.dll是Windows操作系统的核心组件之一,负责内存管理、进程和线程管理以及其他关键系统功能。因为kernel32.dll是系统的基础文件ÿ…...
【高等数学】多元微分学 (一)
偏导数 偏导数定义 如果二元函数 f f f 在 x 0 , y 0 x_0,y_0 x0,y0 的某邻域有定义, 且下述极限存在 lim Δ x → 0 f ( x 0 Δ x , y 0 ) − f ( x 0 , y 0 ) Δ x \lim_{\Delta x\to 0} \frac{f(x_0\Delta x,y_0)-f(x_0,y_0)}{\Delta x} Δx→0limΔxf(x0Δ…...

Python爬取京东商品信息,详细讲解,手把手教学(附源码)
Python 爬虫爬取京东商品信息 下面我将逐一解释每一部分的代码 导入库 from selenium import webdriver from selenium.webdriver.edge.service import Service from selenium.webdriver.edge.options import Options import time import random import csv from selenium.c…...

大家有没有了解过TLKS-PLGS这款接地电阻在线监测装置?它在电力系统中能发挥什么作用呢?
接地电阻在线监测仪(输电铁塔接地电阻监测装置、变电站接地电阻监测装置、三极法接地网电阻监测装置)在电力系统中发挥着至关重要的作用,具体来说,有以下几个方面: 一、实时监测预警。该装置采用激励脉冲技术…...

Shell中的函数
目录 一、系统函数 (一)前言 (二)常用的函数 basename [string/pathname] [suffix] 二、自定义函数 (一)语法 (二)脚本例子 三、函数实际案例 过程中的报错: …...

通过IP地址或者主机名添加打印机20241023
文印室打印机连接方式20241023 Win键盘搜索打印机和扫描仪点击添加打印机或扫描仪,等候片刻点击“我需要的打印机不在列表中”添加打印机,选择使用IP地址或主机名添加打印机点击下一步,设备类型选择自动检测输入主机名:即打印机有…...

基于SpringBoot+Vue智慧养老关爱系统【提供源码+答辩PPT+参考文档+项目部署】
💥 这两年毕业设计和毕业答辩的要求和难度不断提升,传统的JavaWeb项目缺少创新和亮点,往往达不到毕业答辩的要求! ❗如何解决这类问题? 让我们能够顺利通过毕业,我也一直在不断思考、努力、精进。通过2024年…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...