pg_probackup | pg_basebackup | pgBackRest

pg_probackup

pg_probackup 不能直接用于构建主备架构的数据同步,它的作用是备份和恢复 PostgreSQL 数据库,而不是用于主备同步。它可以辅助灾备恢复、基于备份恢复只读备用节点,但不是 WAL 流复制的替代方案。


🔍 一句话结论:

pg_probackup 不能实现两个不同 IP 集群节点之间的实时同步/主备复制。
✅ 若你想在两个 IP 不同的 PostgreSQL 节点间实现主备同步,请使用 流复制(Streaming Replication)基于 repmgrPatronipg_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.confpg_hba.conf
  • 备库用 pg_basebackuppg_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.signalprimary_conninfo

💡 注意:确保 /var/lib/postgresql/13/main 是空目录,且备库服务已停止。


🧩 第三步:启动备库

systemctl start postgresql

如果一切正确,备库会自动从主库获取 WAL 日志,实现流复制。


📘 对比 pg_basebackup vs pg_probackup

功能pg_basebackuppg_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
  • 安装路径(默认/自定义)

我可以为你生成完整的主备部署文档或自动化脚本。是否继续?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值