备份需根据自身情况替换参数,使用前请在测试环境验证后使用
备份脚本
bash
#!/bin/bash
# 添加备份元数据
PGPASSWORD="$PG_PASSWORD" pg_dumpall -h "$PG_HOST" -p "$PG_PORT" -U "$PG_USER" \
--clean --if-exists | gzip > "$BACKUP_FILE"
# 同时生成备份信息
echo "备份时间: $DATE" > "${BACKUP_FILE}.info"
echo "PostgreSQL版本: $(psql -h $PG_HOST -p $PG_PORT -U $PG_USER -d postgres -t -c 'SHOW server_version;')" >> "${BACKUP_FILE}.info"
使用 --clean 选项自动清理现有对象。
1. 恢复备份文件
解压并恢复所有数据库
bash
# 解压并恢复到数据库
gunzip -c pg_backup_2026-06-12_14-30-00.sql.gz | psql -h localhost -p 5432 -U postgres
或者分步操作
bash
# 先解压
gunzip pg_backup_2026-06-12_14-30-00.sql.gz
# 会得到 pg_backup_2026-06-12_14-30-00.sql 文件
# 然后恢复
psql -h localhost -p 5432 -U postgres -f pg_backup_2026-06-12_14-30-00.sql
2. 恢复特定数据库
如果需要只恢复某个数据库:
bash
# 先从备份中提取特定数据库
gunzip -c pg_backup_2026-06-12_14-30-00.sql.gz | grep -i "connect to your_database_name" -A 1000000 | psql -h localhost -p 5432 -U postgres -d your_database_name
3. 恢复前注意事项
-
目标数据库应该是空的,或者先删除现有数据库:
sqlDROP DATABASE IF EXISTS database_name; CREATE DATABASE database_name; -
或者使用 --clean 选项重新创建:
bashpg_dumpall -h localhost -p 5432 -U postgres --clean | gzip > backup.sql.gz -
恢复整个集群会覆盖所有数据库和角色
5. 查看备份内容(不恢复)
bash
# 查看备份文件包含哪些数据库
gunzip -c pg_backup_2026-06-12_14-30-00.sql.gz | grep "^\\connect"
# 查看前100行
gunzip -c pg_backup_2026-06-12_14-30-00.sql.gz | head -100