“恢复 Debian 上的 PostgreSQL 数据库”通常有两种常见场景:从备份恢复 和 误操作/损坏后修复。下面我按最常见的情况给你说明。
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
pg_dump 的自定义格式(-Fc)如果你用的是:
pg_dump -Fc mydb > mydb.dump
恢复命令:
sudo -u postgres pg_restore -d mydb /path/mydb.dump
如果数据库不存在,先创建:
sudo -u postgres createdb mydb
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,默认没有“回滚日志”。
可尝试方案:
时间点恢复(PITR)
未提交事务
表被 DROP
sudo systemctl status postgresql
sudo journalctl -u postgresql
常见问题:
修复示例:
sudo chown -R postgres:postgres /var/lib/postgresql
sudo systemctl restart postgresql
| 项目 | 路径 |
|---|---|
| 数据目录 | /var/lib/postgresql/15/main |
| 配置文件 | /etc/postgresql/15/main/ |
| 日志 | /var/log/postgresql/ |
请告诉我:
psql --version)我可以一步一步带你操作。