pg_probackup
pg_probackup
不能直接用于构建主备架构的数据同步,它的作用是备份和恢复 PostgreSQL 数据库,而不是用于主备同步。它可以辅助灾备恢复、基于备份恢复只读备用节点,但不是 WAL 流复制的替代方案。
🔍 一句话结论:
❌
pg_probackup
不能实现两个不同 IP 集群节点之间的实时同步/主备复制。
✅ 若你想在两个 IP 不同的 PostgreSQL 节点间实现主备同步,请使用 流复制(Streaming Replication) 或 基于repmgr
、Patroni
、pg_auto_failover
等高可用工具。
✅ 正确做法:PostgreSQL 主备同步方法
1. 流复制(Streaming Replication)(推荐用于基础主备)
-
主库开启:
wal_level = replica archive_mode = on max_wal_senders = 10
-
备库使用
pg_basebackup
或者pg_probackup restore
恢复初始数据 -
再配置
recovery.conf
(PostgreSQL 12+ 是standby.signal
+primary_conninfo
)
这是真正实现主备同步的标准方法。
🧠 pg_probackup
的实际用途:
- 支持 物理备份(全备、增量备、归档日志)
- 支持备份校验、压缩、远程备份等功能
- 支持从一个备份恢复出一个新的库实例(适合作为 异地灾备 或只读从库)
举例:从 pg_probackup 生成的备份恢复只读副本
你可以这样做:
pg_probackup restore -B /data/backup_dir -D /data/new_pgdata --instance mydb --recovery-target-time="2025-07-20 10:00:00"
然后手动配置 recovery.conf
(旧版)或 postgresql.auto.conf
来连接主库,作为 standby
节点。
但这个 不是实时同步,也不是典型主备架构,而是“灾备副本”。
✅ 如果你要构建两节点主备集群(不同 IP):
方案一:原生 Streaming Replication
- 主库配置
postgresql.conf
和pg_hba.conf
- 备库用
pg_basebackup
或pg_probackup restore
初始化 - 创建
standby.signal
并配置primary_conninfo
方案二:使用 repmgr
- 自动化管理主备、故障切换、复制槽等
- 支持手动/自动切换、状态监控
方案三:使用 Patroni + etcd/Consul + HAProxy
- 实现企业级 PostgreSQL 高可用架构
📝 总结
工具/机制 | 是否支持主备同步 | 说明 |
---|---|---|
pg_probackup | ❌ | 用于备份/恢复,不做主备同步 |
pg_basebackup | ✅ | 初始化主备数据的工具 |
流复制(Streaming Replication) | ✅ | PostgreSQL 标准主备机制,支持实时同步 |
repmgr | ✅ | 主备管理与故障切换框架 |
Patroni | ✅ | 企业级自动化主备、健康检查与故障转移方案 |
如你希望:
利用
pg_probackup
实现“主机A向主机B同步数据”,可以采用 定期增量备份 + 定时恢复 模式,但这属于准同步灾备,不是实时主备。
需要我帮你生成具体的主备配置流程(如基于流复制、repmgr、Patroni)吗?可提供 IP/版本信息,我来出完整方案。
pg_basebackup
pg_basebackup
是 PostgreSQL 官方提供的用于快速搭建主备复制环境的标准工具,支持不同 IP 的主从节点间数据同步初始化,但它本身不实现主从实时同步,而是:
✅ 用于初始化备库数据目录,
❌ 不能单独实现主备同步,需配合 流复制机制(Streaming Replication)。
✅ 一句话结论:
pg_basebackup
是搭建 PostgreSQL 主备集群时初始化 备库数据目录 的官方工具,
适用于两个不同 IP 的节点,作为 Streaming Replication 架构的一部分。
🧱 pg_basebackup
的作用
功能 | 是否支持 |
---|---|
将主库的数据目录完整复制到备库 | ✅ |
支持远程备份(主库→备库) | ✅ |
同步 pg_wal 目录 | ✅ |
自动创建 standby.signal | ✅(PostgreSQL 12+) |
实现主备实时同步 | ❌(需流复制配合) |
🛠 使用场景示意
你有两个节点:
- 主库:192.168.1.10
- 备库:192.168.1.20
希望从主库初始化备库并搭建主备同步。
📌 示例步骤(PostgreSQL 13+)
🧩 第一步:主库配置
编辑 postgresql.conf
:
wal_level = replica
max_wal_senders = 10
wal_keep_size = 128MB
编辑 pg_hba.conf
:
host replication replicator 192.168.1.20/32 md5
创建复制用户:
psql -c "CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'yourpassword';"
重启主库:
systemctl restart postgresql
🧩 第二步:备库执行 pg_basebackup
在 192.168.1.20(备库)上:
pg_basebackup -h 192.168.1.10 -U replicator -D /var/lib/postgresql/13/main -Fp -Xs -P -R
解释:
-h
: 主库地址-U
: 复制用户-D
: 备份目标目录(即备库的 pgdata 目录)-Fp
: 文件格式-Xs
: 同步 WAL 日志-P
: 显示进度-R
: 自动生成standby.signal
和primary_conninfo
💡 注意:确保
/var/lib/postgresql/13/main
是空目录,且备库服务已停止。
🧩 第三步:启动备库
systemctl start postgresql
如果一切正确,备库会自动从主库获取 WAL 日志,实现流复制。
📘 对比 pg_basebackup
vs pg_probackup
功能 | pg_basebackup | pg_probackup |
---|---|---|
主要用途 | 主备初始化 | 全量/增量备份与恢复 |
适合主备搭建 | ✅ 流复制初始化工具 | ❌(不是用于主备同步) |
支持压缩 | ❌(默认不压缩) | ✅(支持多种压缩级别) |
支持恢复到时间点 | ❌ | ✅(支持 --recovery-target-time ) |
支持增量备份 | ❌ | ✅ |
易用性 | ✅(简单一行命令) | ⛔ 配置复杂,需要定义备份目录、实例等 |
🧠 总结建议
目标用途 | 推荐工具 |
---|---|
初始化主备节点 | pg_basebackup |
灾备方案、定时备份、增量恢复 | pg_probackup |
构建企业级高可用主备 | pg_basebackup + 流复制 + repmgr/Patroni |
是否需要我为你生成一套完整的 主备搭建脚本(基于 pg_basebackup + 流复制)?可以提供你的 PostgreSQL 版本与主从节点 IP,我来为你量身定制。
pgBackRest
很好问题!pgBackRest
是一个强大、企业级的 PostgreSQL 备份和恢复工具,支持 远程备份、增量备份、压缩、加密、多主机同步备份 等功能。但它:
❌ 并不是用于实时主备复制的工具;
✅ 可用于 搭建从库时初始化数据目录,作为pg_basebackup
的替代方案;
✅ 也可用于多主机之间通过 恢复和同步 实现灾备或只读副本构建。
✅ 一句话总结:
pgBackRest
是用于备份/恢复的工具,可以将一个 PostgreSQL 主库的备份恢复到另一个不同 IP 的节点,从而搭建只读副本或备库(但主备实时同步仍需使用流复制)。
📌 核心用途对比
工具 | 是否支持实时主备复制 | 是否支持多节点备份恢复 | 是否支持压缩/加密 | 是否支持增量备份 |
---|---|---|---|---|
pg_basebackup | ✅(辅助流复制) | ❌ | ❌ | ❌ |
pgBackRest | ❌(不做同步) | ✅(备份+恢复) | ✅(强大) | ✅(支持块级) |
pg_probackup | ❌ | ✅ | ✅ | ✅ |
🧠 pgBackRest
适合哪些场景?
- 企业级 PostgreSQL 多主机集中备份方案
- 灾备恢复(主库崩溃后从备份节点快速恢复)
- 基于备份创建一个新的备库,再结合
standby.signal
建立流复制 - 替代
pg_basebackup
做初始化,从备份恢复数据更灵活
📦 搭建流程:使用 pgBackRest
+ 流复制构建主备架构
🧩 主节点(主库)配置:
1. 安装 pgBackRest(主从都需安装)
sudo apt install pgbackrest
2. 编辑配置文件(例如 /etc/pgbackrest.conf
)
[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2
start-fast=y
compress-level=3
[main]
pg1-path=/var/lib/postgresql/14/main
3. 创建备份目录并授权
mkdir -p /var/lib/pgbackrest
chown -R postgres:postgres /var/lib/pgbackrest
4. 执行备份
pgbackrest --stanza=main --log-level-console=info stanza-create
pgbackrest --stanza=main --log-level-console=info backup
🧩 从节点(备库)配置:
1. 确保已安装 pgBackRest,配置 /etc/pgbackrest.conf
[global]
repo1-path=/mnt/backup
log-level-console=info
[main]
pg1-path=/var/lib/postgresql/14/main
可以通过 NFS/SCP 将主节点备份复制过来,也可以使用 pgBackRest 的 远程备份同步。
2. 恢复备份作为初始化:
pgbackrest --stanza=main --delta restore
3. 配置 standby.signal
实现流复制:
PostgreSQL 12+,恢复后在数据目录下创建文件:
touch /var/lib/postgresql/14/main/standby.signal
添加连接主库的配置到 postgresql.auto.conf
:
primary_conninfo = 'host=192.168.1.10 port=5432 user=replicator password=yourpassword application_name=standby1'
4. 启动备库服务:
systemctl start postgresql
备库即通过流复制实时同步主库 WAL,成为真正意义上的从库。
📝 总结建议
目标 | 推荐方案 |
---|---|
实时主备同步 | pg_basebackup + 流复制(最简单) |
企业级灾备 + 数据初始化 | pgBackRest + 流复制(强烈推荐) |
周期性备份/异地恢复/加密 | pgBackRest or pg_probackup |
从备份创建只读副本 | pgBackRest restore + standby.signal |
✅ 是否适合你?
如果你现在想要:
- 用两个 IP 的节点搭建主备
- 主库已有数据并希望构建高可用
- 希望支持未来灾难恢复和增量备份
➡ 使用 pgBackRest
做初始数据同步 + 流复制做实时同步 是理想方案。
如果你愿意,我可以帮你出一整套基于 pgBackRest
的 主备自动搭建脚本和配置模板,请提供以下信息:
- PostgreSQL 版本
- 主从节点 IP
- 安装路径(默认/自定义)
我可以为你生成完整的主备部署文档或自动化脚本。是否继续?