Debian恢复PostgreSQL数据步骤
导读:Debian系统恢复PostgreSQL数据的通用步骤 1. 准备工作:备份当前数据 在进行任何恢复操作前,务必备份当前数据库集群,防止恢复过程中出现意外导致数据进一步丢失。 sudo pg_dumpall -U postgres >...
Debian系统恢复PostgreSQL数据的通用步骤
1. 准备工作:备份当前数据
在进行任何恢复操作前,务必备份当前数据库集群,防止恢复过程中出现意外导致数据进一步丢失。
sudo pg_dumpall -U postgres >
/path/to/backup/all-databases.sql
2. 停止PostgreSQL服务
恢复操作需要确保数据一致性,因此需先停止PostgreSQL服务:
sudo systemctl stop postgresql
3. 根据备份类型选择恢复方式
(1)逻辑备份恢复(适用于.dump
/.sql
格式备份)
- 恢复完整数据库集群:若备份是
pg_dumpall
生成的all-databases.sql
文件,可使用psql
直接恢复:sudo -u postgres psql < /path/to/backup/all-databases.sql
- 恢复特定数据库:若备份是
pg_dump
生成的数据库级备份(如database_name.dump
),需指定数据库名和备份文件路径:sudo -u postgres pg_restore -U postgres -d database_name /path/to/backup/database_name.dump # 二进制格式(.dump) # 或 sudo -u postgres psql -U postgres -d database_name < /path/to/backup/database_name.sql # SQL格式(.sql)
(2)物理备份恢复(适用于pg_basebackup
生成的完整数据目录备份)
若使用pg_basebackup
做过物理备份(如备份到/backup/full_backup
目录),需替换当前数据目录内容并修复权限:
sudo rm -rf /var/lib/postgresql/<
版本号>
/main/* # 清空当前数据目录(需替换<
版本号>
,如16/main)
sudo cp -r /backup/full_backup/* /var/lib/postgresql/<
版本号>
/main/ # 复制备份文件
sudo chown -R postgres:postgres /var/lib/postgresql/<
版本号>
/main/ # 修复所有权
4. 启动PostgreSQL服务并验证
恢复完成后,启动服务并检查数据完整性:
sudo systemctl start postgresql
# 验证数据库列表
sudo -u postgres psql -c "\l"
# 连接目标数据库并检查表数据
sudo -u postgres psql -d database_name -c "\dt"
sudo -u postgres psql -d database_name -c "SELECT * FROM table_name LIMIT 5;
"
5. 高级场景:基于时间点恢复(PITR,需提前开启WAL归档)
若需恢复到某一特定时间点(如误删数据前的状态),需提前配置WAL归档并完成以下步骤:
- ① 开启WAL归档:修改
postgresql.conf
文件(位于/etc/postgresql/< 版本号> /main/
或$PGDATA
目录):
重启服务使配置生效:wal_level = replica archive_mode = on archive_command = 'cp %p /usr/local/pgsql/arch/%f' # 归档路径需提前创建(sudo mkdir -p /usr/local/pgsql/arch) max_wal_senders = 2
sudo systemctl restart postgresql
。 - ② 执行基础备份:使用
pg_basebackup
生成全量备份(如备份到/backup/pitr_backup
):sudo -u postgres pg_basebackup -Ft -Pv -Xf -z -p 5432 -D /backup/pitr_backup
- ③ 触发WAL日志切换:误操作后,执行
pg_switch_wal()
生成新的WAL日志文件:SELECT pg_switch_wal();
- ④ 配置PITR参数:清空当前数据目录,复制基础备份内容,并创建
postgresql.auto.conf
文件(位于数据目录)设置恢复参数:sudo rm -rf /var/lib/postgresql/< 版本号> /main/* sudo cp -r /backup/pitr_backup/* /var/lib/postgresql/< 版本号> /main/ echo "restore_command = 'cp /usr/local/pgsql/arch/%f %p'" > > $PGDATA/postgresql.auto.conf echo "recovery_target_time = '2025-10-01 12:00:00+08'" > > $PGDATA/postgresql.auto.conf # 替换为目标时间 echo "recovery_target_timeline = 'latest'" > > $PGDATA/postgresql.auto.conf
- ⑤ 启动恢复并验证:启动服务后,PostgreSQL会自动执行恢复,完成后会自动重启:
sudo systemctl start postgresql # 检查恢复状态(日志中会显示“recovery complete”) journalctl -u postgresql -f
注意事项
- 恢复前务必确认备份文件的完整性和可恢复性(可通过
pg_restore -l
查看备份内容); - 逻辑恢复时,若目标数据库已存在,需先删除或使用
--clean
选项(pg_restore --clean -d database_name backup.dump
); - 物理恢复时,需确保备份目录与当前PostgreSQL版本一致,避免版本不兼容;
- PITR需提前开启WAL归档,否则无法恢复到指定时间点;
- 若恢复失败,可查看PostgreSQL日志(
/var/log/postgresql/postgresql-< 版本号> -main.log
)定位问题。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian恢复PostgreSQL数据步骤
本文地址: https://pptw.com/jishu/724877.html