PostgreSQL 主从同步


PostgreSQL 主从同步

原创 已于 2026-06-28 15:49:14 修改 · 粉丝可见 · 45 阅读 · 0 · 0 GEO检测 · 编辑
文章链接:https://blog.csdn.net/hacker_51/article/details/162365310

简介

PostgreSQL主从复制是数据库高可用、读写分离、数据容灾的核心技术,通过将主数据库(主库)的数据变更实时同步至从数据库(备库),实现数据冗余备份、读请求负载分担、故障快速切换,是生产环境中保障数据库稳定运行的基础架构。本文将系统讲解其核心原理、复制模式、实操搭建流程、关键优化方案及常见问题解决方案。

PostgreSQL的WAL(预写式日志)是主服务器上更改/活动的记录,并可视为数据库中发生的更改的日志或账本。下图展示了在一个本地主PostgreSQL实例和一个远程热备实例中的WAL传播流程。

上述图表展示了全部五个主要阶段。

实验步骤

将本地数据库作为 主 ,服务器数据库作为从。

内网穿透

将本地数据库端口外露,使得服务器数据库可以进行联通。具体实现,可以查看我之前的学习笔记: frp搭建内网穿透工具-CSDN博客

搭建主数据库

1
2
3
4
5
6
docker run --name postgres \
-e POSTGRES_PASSWORD=123456 \
-p 5432:5432 \
-v /home/angindem/postgre/data:/var/lib/postgresql \
--restart=always \
-d postgres

建立数据的连接

去到data目录下找到 postgresql.conf 配置进行配置从数据库的连接

这是我的挂载的目录路径可以做一下参考:/home/angindem/postgre/data/18/docker

1
2
3
cat >> /home/angindem/postgre/data/18/docker/postgresql.conf <<-'EOF'
primary_conninfo = 'host=172.20.0.2 port=5432 user=repl password=repl'
EOF

host:可访问主数据库IP地址(注意服务器这里的外网IP)

port:连接端口(注意服务器这里的外网端口)

user:登录用户

password:登录密码

设置数据库访问白名单

1
2
3
4
cat >> /home/angindem/postgre/data/18/docker/pg_hba.conf <<-'EOF'
host replication repl 172.20.0.2/32 md5
host replication repl 172.20.0.3/32 md5
EOF

主数据库新建用户repl可复制用户

进入容器:

1
docker exec -it postgres /bin/bash

登录用户:

1
psql -U postgres

创建可登录可复制数据权限的用户:

1
2
set synchronous_commit =off;
create role repl login replication encrypted password 'repl';

设置同步参数

1
2
3
4
5
vim /home/angindem/postgre/data/18/docker/postgresql.conf


wal_level = replica
max_wal_senders = 2

重启主数据库加载配置

1
docker restart postgres && docker logs -f postgres

搭建从数据库

1
2
3
4
5
6
docker run --name postgres \
-e POSTGRES_PASSWORD=xIulKv6ZU9dXfHt3wqR \
-p 5432:5432 \
-v /root/postgres/backup:/var/lib/backup \
--restart=always \
-d postgres

拉取主库数据文件

1
2
docker exec -it postgres bash
pg_basebackup -h 192.168.5.54 -D /var/lib/backup -p 5432 -U repl -Fp -Xs -Pv -R --checkpoint=fast

输入密码开始拷贝

成功拷贝整个数据库并映射到挂载目录:

停止从数据库

1
docker stop postgres

从库同步主库数据

1
2
rm -rf /root/postgres/data/18/docker/*
cp -rf /root/postgres/backup/* /root/postgres/data/18/docker/

配置从库同步参数

由于从库数据文件是从主库拉取过来,需要先删除主库同步相关的参数,然后新增从库同步参数:

1
2
3
4
5
vim /data/db/postgresql/postgresql.conf

primary_conninfo = 'host=192.168.179.134 port=5432 user=replica password=wsx-123'
recovery_target_timeline = latest
hot_standby = on

启动从库

1
docker start postgres && docker logs -f postgres

测试主从同步

在主数据库中插入一条数据:

从数据库查看:

成功动态同步


觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭

微信二维码

wechat pay

支付宝二维码

ali pay

PostgreSQL 主从同步
http://blog.angindem.cn/2026/06/28/Angindem-CSDN博客/202_202/
作者
Angindem
发布于
2026年6月28日
许可协议