Ubuntu上PostgreSQL数据恢复方法
.sql
、.dump
格式的逻辑备份,或包含WAL日志的物理备份),且备份文件未损坏。sudo apt-get update && sudo apt-get install pgadmin4
安装pgAdmin;命令行工具(pg_restore
、psql
)通常随PostgreSQL安装包自带。postgres
用户)。localhost
、postgres
用户密码)连接。mydatabase
)。/path/to/mydatabase.sql
)。使用psql
命令执行SQL备份文件,语法如下:
sudo -u postgres psql -f /path/to/backup.sql -d 目标数据库名
例如:sudo -u postgres psql -f /home/user/backups/mydb.sql -d mydatabase
说明:-f
指定备份文件路径,-d
指定目标数据库(需提前存在)。
使用pg_restore
命令恢复自定义格式备份(支持增量备份、并行恢复等特性),语法如下:
pg_restore -h localhost -U postgres -d 目标数据库名 /path/to/backup.dump
例如:pg_restore -h localhost -U postgres -d mydatabase /var/backups/mydb.dump
说明:-h
指定服务器地址(本地为localhost
),-U
指定用户名(postgres
为默认管理员),-d
指定目标数据库。
若备份时开启了WAL归档(archive_mode=on
),可恢复到指定时间点(如事故前1小时),步骤如下:
sudo systemctl stop postgresql
.backup
文件)和WAL日志复制到PostgreSQL数据目录(如/var/lib/postgresql/12/main/
)postgresql.conf
(位于数据目录),添加以下参数:restore_command = 'cp /path/to/archive/%f %p' # 从归档目录复制WAL日志
recovery_target_time = '2025-09-30 18:00:00' # 恢复到的具体时间
recovery_target_action = 'promote' # 恢复完成后提升为主库
sudo systemctl start postgresql
,查看日志(/var/log/postgresql/postgresql-12-main.log
)确认恢复进度(直到出现“recovery complete”)。pg_dump
或pgAdmin备份当前数据库,防止恢复失败导致数据丢失。psql -U postgres -d 目标数据库名
),执行SELECT COUNT(*) FROM 关键表;
等查询,确认数据数量和内容正确。