在 Debian 上备份 PostgreSQL,常见做法有逻辑备份(pg_dump / pg_dumpall)和物理备份(文件级 / WAL 归档)。下面按使用频率从高到低说明。
pg_dump -U postgres 数据库名 > db_backup.sql
如果 PostgreSQL 在本地且用 peer 认证:
sudo -u postgres pg_dump 数据库名 > db_backup.sql
压缩备份:
pg_dump -U postgres 数据库名 | gzip > db_backup.sql.gz
pg_dumpall -U postgres > all_db_backup.sql
pg_dump -U postgres -s 数据库名 > schema.sql
psql -U postgres 数据库名 < db_backup.sql
或解压后恢复:
gunzip < db_backup.sql.gz | psql -U postgres 数据库名
编辑定时任务:
sudo crontab -e
每天凌晨 2 点备份:
0 2 * * * pg_dump -U postgres 数据库名 | gzip > /backup/db_$(date +\%F).sql.gz
确保 /backup 目录存在且 postgres 用户有写权限。
systemctl stop postgresql
cp -r /var/lib/postgresql/15/main /backup/pgdata
systemctl start postgresql
使用 pg_basebackup:
pg_basebackup -U postgres -D /backup/pgdata -Ft -z -P
结合 WAL 归档可实现时间点恢复(PITR),配置较复杂,适合 DBA 场景。
/var/lib/postgresql/<版本>/main/etc/postgresql/<版本>/main/systemctl status postgresql
✅ 小中型库:pg_dump + cron
✅ 多库环境:pg_dumpall
✅ 大型/关键业务:物理备份 + WAL 归档
✅ 备份文件一定要异地保存
如果你愿意,可以告诉我:
我可以帮你写一套完整备份 + 自动清理脚本。