在 CentOS 上备份 PostgreSQL 数据库,常见做法有 逻辑备份 和 物理备份 两种。下面按最常用、最安全的方式给你详细说明,并附示例。
使用 pg_dump 或 pg_dumpall,只备份数据库内容(SQL 级别)。
pg_dump -U 用户名 数据库名 > backup.sql
示例:
su - postgres
pg_dump -U postgres mydb > /backup/mydb_$(date +%F).sql
✅ 优点
❌ 缺点
pg_dumpall -U postgres > /backup/all_db_$(date +%F).sql
pg_dump -U postgres mydb | gzip > /backup/mydb_$(date +%F).sql.gz
psql -U postgres -d mydb < backup.sql
或解压后恢复:
gunzip < backup.sql.gz | psql -U postgres -d mydb
直接备份数据库文件,速度快,适合大数据量。
systemctl stop postgresql
cp -a /var/lib/pgsql/data /backup/pgdata_$(date +%F)
systemctl start postgresql
⚠️ 需要停机,不推荐线上使用
使用 pg_basebackup
pg_basebackup -U postgres -D /backup/pgdata -Ft -z -P
参数说明:
-D 备份目录-Ft tar 格式-z 压缩-P 显示进度✅ 不需要停机
✅ 可用于主从复制
用于 时间点恢复(PITR)
wal_level = replica
archive_mode = on
archive_command = 'cp %p /backup/wal/%f'
systemctl restart postgresql
crontab -e
每天凌晨 2 点备份:
0 2 * * * pg_dump -U postgres mydb | gzip > /backup/mydb_$(date +\%F).sql.gz
✅ 定期测试恢复
✅ 备份文件不要放在数据库同一磁盘
✅ 生产环境推荐:
pg_basebackup + WAL 归档
| 项目 | 路径 |
|---|---|
| 数据目录 | /var/lib/pgsql/data |
| 配置文件 | /var/lib/pgsql/data/postgresql.conf |
| 日志 | /var/lib/pgsql/data/log/ |
如果你愿意,可以告诉我:
我可以帮你定制一套完整备份方案(含脚本)。