温馨提示×

CentOS PostgreSQL如何备份

小樊
47
2026-07-21 10:07:36
栏目: 云计算

CentOS 上备份 PostgreSQL,常用方式有三种:pg_dump(逻辑备份)pg_dumpall物理备份(WAL + pg_basebackup)。下面按常见场景说明。


一、环境准备

先确认 PostgreSQL 版本与数据目录(常见示例):

psql --version
systemctl status postgresql

示例路径(CentOS 7/8):

  • 数据目录:/var/lib/pgsql/14/data
  • 服务名:postgresql-14

二、逻辑备份(最常用)

1️⃣ 备份单个数据库(推荐)

sudo -u postgres pg_dump dbname > /backup/dbname_$(date +%F).sql

压缩备份:

sudo -u postgres pg_dump dbname | gzip > /backup/dbname_$(date +%F).sql.gz

✅ 适合:

  • 数据量不大
  • 跨版本恢复
  • 迁移数据库

2️⃣ 备份所有数据库

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

⚠ 不建议频繁使用,文件较大


3️⃣ 只备份结构或数据

  • 仅结构:
pg_dump -s dbname > dbname_schema.sql
  • 仅数据:
pg_dump -a dbname > dbname_data.sql

三、恢复数据库

恢复单个数据库

sudo -u postgres psql dbname < dbname_2026-01-21.sql

恢复压缩文件

gunzip < dbname.sql.gz | sudo -u postgres psql dbname

四、物理备份(生产环境推荐)

1️⃣ 使用 pg_basebackup

sudo -u postgres pg_basebackup \
  -D /backup/pgdata_$(date +%F) \
  -Ft -z -P

参数说明:

  • -Ft:tar 格式
  • -z:压缩
  • -P:显示进度

✅ 适合:

  • 大数据量
  • 灾难恢复
  • 主从复制准备

⚠ 需要开启 WAL(默认开启)


五、自动定时备份(crontab)

编辑定时任务:

sudo -u postgres crontab -e

每天凌晨 2 点备份:

0 2 * * * /usr/bin/pg_dump dbname | gzip > /backup/dbname_$(date +\%F).sql.gz

六、备份目录建议

mkdir -p /backup/pgsql
chown postgres:postgres /backup/pgsql

七、常见错误排查

❌ 权限不足

permission denied

✅ 使用 postgres 用户执行

❌ 找不到 pg_dump

which pg_dump

或指定完整路径:

/usr/pgsql-14/bin/pg_dump

八、备份策略建议(生产)

场景 方案
小数据量 pg_dump
大数据量 pg_basebackup + WAL
容灾 物理备份
升级迁移 pg_dump

如果你愿意,可以告诉我:

  • PostgreSQL 版本
  • 数据量大小
  • 是否主从 / 生产环境

我可以帮你设计一套 完整备份 + 恢复方案

0