首页主机资讯Debian恢复PostgreSQL数据步骤

Debian恢复PostgreSQL数据步骤

时间2025-10-13 17:04:03发布访客分类主机资讯浏览1190
导读: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
Debian中PostgreSQL故障排查思路 Debian如何配置MongoDB网络端口

游客 回复需填写必要信息