在 Debian 系统上备份 PostgreSQL 常见且推荐的方式主要有以下几种,按使用场景从高到低说明。
pg_dump(最常用,逻辑备份)适合:
sudo -u postgres pg_dump dbname > dbname_$(date +%F).sql
示例:
sudo -u postgres pg_dump mydb > /backup/mydb_2026-01-21.sql
sudo -u postgres pg_dump mydb | gzip > /backup/mydb_$(date +%F).sql.gz
sudo -u postgres psql mydb < /backup/mydb_2026-01-21.sql
或解压后恢复:
gunzip < /backup/mydb_2026-01-21.sql.gz | sudo -u postgres psql mydb
pg_dumpall(全实例备份)适合:
sudo -u postgres pg_dumpall > /backup/all_databases_$(date +%F).sql
恢复:
sudo -u postgres psql -f /backup/all_databases_2026-01-21.sql
⚠️ 注意:pg_dumpall 不支持并行,速度较慢。
pg_basebackup(官方推荐)适合:
sudo -u postgres pg_basebackup \
-D /backup/pg_basebackup_$(date +%F) \
-Ft -z -P
参数说明:
-D:备份目录-Ft:tar 格式-z:压缩-P:显示进度恢复时需要:
data 目录recovery.conf / postgresql.conf流程:
pg_basebackuppostgresql.conf 示例:
wal_level = replica
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/archive/%f'
适合:
sudo crontab -e -u postgres
0 2 * * * pg_dump mydb | gzip > /backup/mydb_$(date +\%F).sql.gz
✅ 存储位置:
✅ 权限控制:
chmod 600 /backup/*.sql
✅ 定期清理旧备份:
find /backup -name "*.sql.gz" -mtime +30 -delete
pg_dump: error: connection to server failedsudo -u postgres pg_dump ...
pg_dump --version
psql --version
| 场景 | 推荐方式 |
|---|---|
| 小数据库 | pg_dump |
| 多库 + 用户 | pg_dumpall |
| 生产环境 | pg_basebackup + WAL |
| 自动备份 | cron + pg_dump |
如果你愿意,我可以:
只要告诉我你的 Debian 版本 + PostgreSQL 版本 + 数据规模 即可。