PostgreSQL数据库之pg_basebackup使用

目录

前言

1. 基础用法

1.1 备份整个数据库集群到指定目录

2. 常用选项

2.1 指定备份格式(默认目录格式)

2.2 包含预写日志(WAL)

2.3 显示进度和详细输出

2.4 压缩备份(需要 PostgreSQL 13+)

3. 高级选项

3.1 从备库备份(避免主库压力)

3.2 设置备份标签(标记备份用途)

3.3 限制备份速度(避免影响生产)

4. 恢复备份

4.1 恢复物理备份

5. 注意事项

6. 示例场景

6.1 场景 1: 基本物理备份

6.2 场景 2: 压缩备份并传输到远程

6.3 场景 3: 搭建主从复制

7. 与 pg_dump 的区别


前言

首先,我们在处理大型数据库时发现pg_dump不够高效。pg_basebackup更适合全量备份,尤其是用于搭建主从复制或者PITR(时间点恢复)。

接下来,解释pg_basebackup的基本用法,比如如何连接到数据库,备份到目录或压缩文件。还要提到参数如-D指定目录,-X获取WAL日志,-Ft指定tar格式,-P显示进度等。同时,要注意权限问题,用户需要有replication权限,或者使用超级用户账户。

如何将备份文件放到数据目录并启动实例。另外,远程备份和从备库备份也是常见的场景,需要覆盖这些情况。

需要区分pg_basebackup和pg_dump的不同应用场景。比如,pg_basebackup是物理级别的,备份整个集群,而pg_dump是逻辑的,可以备份单个数据库或表。可能需要根据备份的目的选择合适的工具。

如何设置主从复制,这时候pg_basebackup是关键步骤,如何使用备份来创建备库。注意事项方面,版本一致性、磁盘空间、权限和备份期间的事务处理都需要提到,避免在使用过程中遇到问题。

最后,示例场景能更好地理解如何应用这些命令,比如基本备份、压缩备份、搭建备库等。要确保示例清晰,参数解释到位,能够直接复制并根据自己的环境调整。

pg_basebackup 是 PostgreSQL 自带的命令行工具,用于创建数据库集群(Cluster)的物理备份(全量备份)。它通过复制数据库的数据目录和事务日志(WAL)实现备份,常用于搭建主从复制(Replication)或创建基础备份以支持 PITR(时间点恢复)。以下是详细的使用说明:


1. 基础用法

1.1 备份整个数据库集群到指定目录
pg_basebackup -U 用户名 -h 主机名 -p 端口 -D 备份目录
  • -U: 指定具有复制权限的数据库用户(默认 postgres

  • -h: 数据库服务器地址(默认 localhost

  • -p: 数据库端口(默认 5432

  • -D: 指定备份存储目录(目录必须为空或不存在)

示例:

pg_basebackup -U replicator -h 192.168.1.100 -p 5432 -D /backup/pg_base

2. 常用选项

2.1 指定备份格式(默认目录格式)
# 备份为目录格式(可直接用于数据恢复)
pg_basebackup -D /backup/pg_base

# 备份为 tar 格式(适合压缩存储)
pg_basebackup -D - -Ft | gzip > backup.tar.gz
  • -Ft: 输出为 tar 格式(需通过管道压缩或重定向)

2.2 包含预写日志(WAL)
pg_basebackup -D /backup/pg_base -X stream
  • -X stream: 在备份期间实时流式传输 WAL 日志(确保备份一致性)

2.3 显示进度和详细输出
pg_basebackup -D /backup/pg_base -P -v
  • -P: 显示备份进度条

  • -v: 输出详细信息

2.4 压缩备份(需要 PostgreSQL 13+)
pg_basebackup -D /backup/pg_base --compress=gzip
  • --compress=方法: 支持 gziplz4zstd 等压缩算法


3. 高级选项

3.1 从备库备份(避免主库压力)
pg_basebackup -h 备库地址 -D /backup/pg_base
  • 备库需配置 hot_standby = on 和允许备份

3.2 设置备份标签(标记备份用途)
pg_basebackup -D /backup/pg_base --label="Monthly_Backup_2023"
3.3 限制备份速度(避免影响生产)
pg_basebackup -D /backup/pg_base --max-rate=10M
  • --max-rate=10M: 限制传输速率为 10MB/s


4. 恢复备份

4.1 恢复物理备份
  1. 停止 PostgreSQL 服务:

    systemctl stop postgresql
  2. 清空原数据目录:

    rm -rf /var/lib/postgresql/数据目录/*
  3. 复制备份文件到数据目录:

    cp -r /backup/pg_base/* /var/lib/postgresql/数据目录/
  4. 启动 PostgreSQL 服务:

    systemctl start postgresql

5. 注意事项

  1. 权限要求:

    • 用户需具有 REPLICATION 权限或为超级用户。

    • 示例授权:

      CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD '密码';
  2. 版本兼容性:

    • pg_basebackup 版本需与 PostgreSQL 服务器版本一致。

  3. 磁盘空间:

    • 备份目录需有足够空间(通常与原数据目录大小相近)。

  4. 备份一致性:

    • 备份期间数据库正常接受写入,但建议在低峰期操作。

  5. 主从复制:

    • pg_basebackup 是搭建主从复制的核心工具(备份文件可直接用于备库初始化)。


6. 示例场景

6.1 场景 1: 基本物理备份
pg_basebackup -U postgres -h 10.0.0.5 -D /backup/pg_base -X stream -P -v
6.2 场景 2: 压缩备份并传输到远程
pg_basebackup -U replicator -h db-primary -D - -Ft | ssh user@backup-server "gzip > /backup/pg_base.tar.gz"
6.3 场景 3: 搭建主从复制
  1. 主库配置:

    # postgresql.conf
    wal_level = replica
    max_wal_senders = 10
    # pg_hba.conf
    host replication replicator 备库IP/32 md5
  2. 备库初始化:

    pg_basebackup -h 主库IP -U replicator -D /var/lib/postgresql/数据目录 -X stream -P -v
  3. 启动备库:

    # 创建 recovery.conf(PostgreSQL 12+ 改为在 postgresql.conf 中配置)
    echo "standby_mode = 'on'
    primary_conninfo = 'host=主库IP port=5432 user=replicator password=密码'" > /var/lib/postgresql/数据目录/standby.signal

7. 与 pg_dump 的区别

特性pg_basebackuppg_dump
备份类型物理备份(二进制文件)逻辑备份(SQL 或自定义格式)
粒度整个数据库集群单个数据库或表
恢复速度快(直接文件替换)慢(需执行 SQL 重建数据)
用途主从复制、PITR、全量恢复数据迁移、单库备份
是否影响业务低(允许并发读写)可能加锁(需谨慎操作)

通过 pg_basebackup,可以实现高效的全量备份和主从架构搭建。结合 WAL 归档和 pg_rewind 工具,可进一步支持增量备份和故障恢复。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

auspicious航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值