温馨提示×

怎样恢复debian postgresql库

小樊
46
2026-09-23 17:54:01
栏目: 云计算

“恢复 Debian 上的 PostgreSQL 数据库”通常有两种常见场景:从备份恢复 和 误操作/损坏后修复。下面我按最常见的情况给你说明。


一、从备份恢复(最常用)

1. 使用 pg_dump 备份文件恢复(.sql 文件)

如果你之前用 pg_dump 导出的 SQL 文件:

# 切换到 postgres 用户
sudo -u postgres psql -d 数据库名 -f /path/backup.sql

示例:

sudo -u postgres psql -d mydb -f /var/backups/mydb.sql

如果是 压缩备份:

sudo -u postgres psql -d mydb < backup.sql

2. 使用 pg_dump 的自定义格式(-Fc)

如果你用的是:

pg_dump -Fc mydb > mydb.dump

恢复命令:

sudo -u postgres pg_restore -d mydb /path/mydb.dump

如果数据库不存在,先创建:

sudo -u postgres createdb mydb

3. 从 pg_basebackup 物理备份恢复

适用于 整个 PostgreSQL 实例恢复。

步骤简述:

# 停止 PostgreSQL
sudo systemctl stop postgresql

# 清空数据目录(谨慎!)
rm -rf /var/lib/postgresql/15/main/*

# 恢复
sudo -u postgres pg_basebackup -D /var/lib/postgresql/15/main -h 原服务器 -U 用户名

# 启动
sudo systemctl start postgresql

二、误删数据 / 表恢复(无备份)

⚠️ 没有备份 = 无法保证恢复

PostgreSQL 不像 MySQL 有 binlog,默认没有“回滚日志”。

可尝试方案:

  1. 时间点恢复(PITR)

    • 需要提前开启 WAL 归档
    • 有基础备份 + WAL 日志
  2. 未提交事务

    • 如果事务未 commit,直接断开连接即可
  3. 表被 DROP

    • 如果没有备份,基本不可恢复

三、PostgreSQL 服务异常恢复

服务无法启动

sudo systemctl status postgresql
sudo journalctl -u postgresql

常见问题:

  • 数据目录权限错误
  • WAL 损坏
  • 磁盘满

修复示例:

sudo chown -R postgres:postgres /var/lib/postgresql
sudo systemctl restart postgresql

四、Debian 常见路径参考

项目 路径
数据目录 /var/lib/postgresql/15/main
配置文件 /etc/postgresql/15/main/
日志 /var/log/postgresql/

五、建议你补充的信息(我可以更精准帮你)

请告诉我:

  1. PostgreSQL 版本(psql --version)
  2. 是 整个库、单表 还是 误删数据
  3. 有没有备份(类型)
  4. 错误提示是什么

我可以一步一步带你操作。

0 踩