pg数据库如何备份到另一台服务器?步骤有哪些?
- 虚拟主机
- 2025-12-20
- 6
将PostgreSQL(PG)数据库备份至另一台服务器是确保数据安全、实现高可用性或进行跨环境迁移的常见需求,整个过程涉及备份策略选择、备份执行、文件传输及恢复配置等关键步骤,需结合业务需求和技术环境进行合理规划,以下是详细操作指南及注意事项。
备份前准备工作
-
环境确认
源服务器(运行PG)与目标服务器(接收备份)需满足以下条件:
- 网络互通:两台服务器可通过IP或主机名互访,建议配置防火墙规则放行PG默认端口(5432)及文件传输端口(如SSH默认22)。
- 版本兼容性:源与目标PG版本尽量一致,若版本不同需注意兼容性(如高版本备份恢复至低版本可能失败)。
- 存储空间:目标服务器需有足够磁盘空间存放备份文件及数据库运行所需空间。
-
权限配置
- 在源服务器上,确保数据库用户(如postgres)具有pg_read_files、pg_read_all_settings等必要权限,执行备份时需超级用户权限。
- 在目标服务器上,创建与源服务器同名的数据库用户及角色,并赋予相应权限(如CREATEDB、LOGIN)。
-
备份工具选择
- pg_dump:用于逻辑备份,可导出单个表、schema或整个数据库,生成SQL脚本或自定义格式文件,适合中小型数据库。
- pg_dumpall:导出所有数据库的全局信息(如用户、权限)及数据,适合多数据库环境。
- pg_basebackup:用于物理备份,直接复制数据目录,适合大型数据库或流复制场景,需目标服务器初始化相同的PG集群。
- 第三方工具:如pgBackRest、Barman,支持增量备份、压缩加密及远程备份,适合企业级需求。
备份执行与传输
逻辑备份(以pg_dump为例)
步骤:
-
导出单个数据库:

参数说明:F c使用自定义格式(二进制),压缩率高;f指定输出路径。
-
导出所有数据库:
pg_dumpall U [用户名] h [源服务器IP] p [端口] f /path/to/backup.sql
- 在目标服务器上初始化相同版本的PG集群(使用initdb)。
- 在源服务器上执行物理备份: pg_basebackup h [源服务器IP] p [端口] U [复制用户] Fp z P R /path/to/backup/directory
参数说明:Fp输出为纯文件格式;z启用压缩;R生成standby.signal文件,便于直接配置流复制。
-
SQL脚本恢复(pg_dumpall导出):
先恢复全局信息,再逐个恢复数据库。

-
自定义格式恢复(pg_dump导出):
支持选择性恢复(如t 表名恢复指定表)。
物理备份恢复
- 若使用pg_basebackup且包含R参数,目标服务器可直接启动为备库: pg_ctl start D /path/to/backup/directory
若未包含R,需手动配置postgresql.conf(如primary_conninfo指向主库)并创建standby.signal文件。
备份策略优化建议
备份类型 适用场景 优点 缺点 逻辑备份 小型数据库、表级迁移 灵活,可跨版本兼容 恢复速度慢,不支持时间点恢复 物理备份 大型数据库、灾备 恢复快,支持时间点恢复 版本依赖强,需相同集群配置 增量备份 频繁备份场景 节省存储空间,速度快 需配合基础全备份 自动化与监控:
- 通过cron定时任务执行备份脚本,例如每日凌晨2点备份: 0 2 * * * /usr/bin/pg_dump U postgres mydb | gzip > /backup/mydb_$(date +%Y%m%d).dump.gz
- 监控备份日志,确保备份成功,可结合pg_probackup等工具实现备份校验。
常见问题与注意事项
- 备份失败:检查网络连通性、磁盘空间、用户权限及PG服务状态。
- 恢复后连接失败:确认目标服务器pg_hba.conf配置允许客户端连接,并检查数据库用户密码是否正确。
- 大备份文件传输慢:启用压缩(如gzip)或使用rsync增量传输,避免高峰期传输。
- 权限问题:确保目标服务器数据目录权限为postgres:postgres,避免启动时报错。
相关问答FAQs
Q1: 如何验证备份文件的完整性?
A1: 可通过以下方式验证:
- 逻辑备份:使用pg_restore l /path/to/backup.dump列出备份内容,确认表及数据量是否正确。
- 物理备份:在目标服务器启动数据库后,执行SELECT COUNT(*) FROM 表名;与源数据对比,或使用pg_checksums校验数据页校验和(需在备份时启用k参数)。
Q2: 如何实现增量备份以减少存储占用?
A2: 增量备份需借助第三方工具如pgBackRest:
- 安装pgBackRest并配置pg_backrest.conf,指定备份路径和保留策略。
- 执行全备份:pg_backrest repo1path=/backup backup type=full。
- 后续执行增量备份:pg_backrest repo1path=/backup backup type=incr。
pgBackRest会基于全备份生成增量文件,大幅减少存储需求,同时支持压缩和加密。
- 若使用pg_basebackup且包含R参数,目标服务器可直接启动为备库: pg_ctl start D /path/to/backup/directory
传输备份文件:
使用scp或rsync将备份文件从源服务器传输至目标服务器:
scp P [SSH端口] /path/to/backup.dump [目标服务器用户]@[目标服务器IP]:/path/to/destination
或通过rsync实现增量同步:

物理备份(以pg_basebackup为例)
步骤:
传输与恢复:
物理备份需将整个数据目录($PGDATA)传输至目标服务器,并确保权限正确(chown R postgres:postgres /path/to/backup/directory)。
目标服务器数据恢复
逻辑备份恢复