温馨提示×

怎么备份CentOS的PostgreSQL

小樊
53
2026-07-09 17:22:40
栏目: 云计算

CentOS 上备份 PostgreSQL,常见、可靠的方式主要有以下几种(按使用频率排序)。以下示例以 PostgreSQL 10+ 为例,低版本也基本通用。


✅ 方法一:使用 pg_dump(最常用,逻辑备份)

特点

  • 备份单个数据库(逻辑备份)
  • 可跨版本恢复
  • 不影响线上服务

基本用法

pg_dump -U 用户名 数据库名 > backup.sql

示例

sudo -u postgres pg_dump mydb > /tmp/mydb_$(date +%F).sql

压缩备份(推荐)

sudo -u postgres pg_dump mydb | gzip > /tmp/mydb_$(date +%F).sql.gz

恢复方法

sudo -u postgres psql mydb < backup.sql

✅ 方法二:使用 pg_dumpall(备份所有数据库)

特点

  • 备份整个 PostgreSQL 实例
  • 包含用户、角色、表空间

备份

sudo -u postgres pg_dumpall > /tmp/all_db_$(date +%F).sql

恢复

sudo -u postgres psql -f /tmp/all_db_*.sql

⚠️ 恢复时会覆盖所有数据库


✅ 方法三:使用 pg_basebackup(物理备份,生产推荐)

特点

  • 物理备份(数据文件级别)
  • 支持 PITR(时间点恢复)
  • 适合大数据量

示例

pg_basebackup -U postgres -D /backup/pgdata -F tar -z -P

常用参数说明:

  • -D:备份目录
  • -F tar:打包
  • -z:压缩
  • -P:显示进度

恢复方式

  1. 停止 PostgreSQL
  2. 清空数据目录
  3. 解压并恢复
  4. 启动 PostgreSQL

✅ 方法四:CentOS 使用 systemd + 定时备份(推荐)

1️⃣ 创建备份脚本

vi /usr/local/bin/pg_backup.sh
#!/bin/bash
BACKUP_DIR=/data/pg_backup
DATE=$(date +%F)
mkdir -p $BACKUP_DIR

sudo -u postgres pg_dumpall | gzip > $BACKUP_DIR/pg_$DATE.sql.gz

2️⃣ 赋予执行权限

chmod +x /usr/local/bin/pg_backup.sh

3️⃣ 配置定时任务

crontab -e
0 2 * * * /usr/local/bin/pg_backup.sh

每天凌晨 2 点备份


✅ 备份路径建议

/data/pg_backup/
/var/backups/postgresql/

✅ 权限与常见问题

1️⃣ 权限错误

sudo -u postgres ...

2️⃣ 找不到 pg_dump

which pg_dump

如未找到,可能是 PostgreSQL 安装在非默认路径,例如:

/usr/pgsql-14/bin/pg_dump

✅ 生产环境最佳实践(总结)

场景 推荐方式
小数据库 pg_dump
整实例备份 pg_dumpall
大数据量 / HA pg_basebackup
自动备份 cron + pg_dumpall

如果你愿意,我可以:

  • ✅ 帮你写 生产级备份脚本
  • ✅ 配置 WAL 归档 + PITR
  • ✅ 对比 逻辑 vs 物理备份
  • ✅ 结合 CentOS 7 / 8 / Stream

告诉我你的 PostgreSQL 版本 + 数据量 + 是否生产环境 即可。

0