在 CentOS 上备份 PostgreSQL 数据,常见、推荐的方式是使用 pg_dump / pg_dumpall(逻辑备份)或 文件系统 / 物理备份(如 pg_basebackup)。下面按使用场景说明。
pg_dump -U 用户名 数据库名 > /backup/dbname_$(date +%F).sql
示例:
pg_dump -U postgres testdb > /backup/testdb_2026-01-15.sql
pg_dump -U postgres testdb | gzip > /backup/testdb_$(date +%F).sql.gz
pg_dump -U postgres -Fc testdb > /backup/testdb.dump
适合备份 整个实例(含角色、表空间)
pg_dumpall -U postgres > /backup/all_$(date +%F).sql
恢复时:
psql -U postgres -f /backup/all_2026-01-15.sql
vi ~/.pgpass
内容:
hostname:port:database:user:password
示例:
localhost:5432:testdb:postgres:123456
权限:
chmod 600 ~/.pgpass
适合 全量备份 + 后续 WAL 归档
pg_basebackup -U postgres -D /backup/pgdata -Ft -z -P
参数说明:
-D 备份目录-Ft tar 格式-z 压缩-P 显示进度⚠️ 需要 postgresql.conf 中开启:
wal_level = replica
编辑定时任务:
crontab -e
每日凌晨 2 点备份:
0 2 * * * pg_dump -U postgres testdb | gzip > /backup/testdb_$(date +\%F).sql.gz
psql -U postgres testdb < /backup/testdb_2026-01-15.sql
pg_restore -U postgres -d testdb /backup/testdb.dump
/backup 有足够空间如果你能告诉我:
我可以给你更合适的备份方案。