目录
前言
首先,我们在处理大型数据库时发现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=方法
: 支持gzip
,lz4
,zstd
等压缩算法
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 恢复物理备份
-
停止 PostgreSQL 服务:
systemctl stop postgresql
-
清空原数据目录:
rm -rf /var/lib/postgresql/数据目录/*
-
复制备份文件到数据目录:
cp -r /backup/pg_base/* /var/lib/postgresql/数据目录/
-
启动 PostgreSQL 服务:
systemctl start postgresql
5. 注意事项
-
权限要求:
-
用户需具有
REPLICATION
权限或为超级用户。 -
示例授权:
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD '密码';
-
-
版本兼容性:
-
pg_basebackup
版本需与 PostgreSQL 服务器版本一致。
-
-
磁盘空间:
-
备份目录需有足够空间(通常与原数据目录大小相近)。
-
-
备份一致性:
-
备份期间数据库正常接受写入,但建议在低峰期操作。
-
-
主从复制:
-
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: 搭建主从复制
-
主库配置:
# postgresql.conf wal_level = replica max_wal_senders = 10
# pg_hba.conf host replication replicator 备库IP/32 md5
-
备库初始化:
pg_basebackup -h 主库IP -U replicator -D /var/lib/postgresql/数据目录 -X stream -P -v
-
启动备库:
# 创建 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_basebackup | pg_dump |
---|---|---|
备份类型 | 物理备份(二进制文件) | 逻辑备份(SQL 或自定义格式) |
粒度 | 整个数据库集群 | 单个数据库或表 |
恢复速度 | 快(直接文件替换) | 慢(需执行 SQL 重建数据) |
用途 | 主从复制、PITR、全量恢复 | 数据迁移、单库备份 |
是否影响业务 | 低(允许并发读写) | 可能加锁(需谨慎操作) |
通过 pg_basebackup
,可以实现高效的全量备份和主从架构搭建。结合 WAL 归档和 pg_rewind
工具,可进一步支持增量备份和故障恢复。