在进行数据恢复前,需完成以下关键步骤以避免二次损失:
pgAdmin提供了直观的图形化恢复流程,适合不熟悉命令行的用户:
mydb)。.sql或.dump格式);命令行工具pg_restore(针对自定义格式备份)和psql(针对SQL格式备份)效率更高,适合脚本化管理:
pg_dump生成的.sql文件):psql -h localhost -U postgres -d 目标数据库名 < /path/to/backupfile.sql
示例:恢复mydb数据库,备份文件位于/home/user/backups/mydb.sql:psql -h localhost -U postgres -d mydb < /home/user/backups/mydb.sql
pg_dump -Fc生成的.dump文件):pg_restore -h localhost -U postgres -d 目标数据库名 /path/to/backupfile.dump
示例:恢复mydb数据库,备份文件位于/home/user/backups/mydb.dump:pg_restore -h localhost -U postgres -d mydb /home/user/backups/mydb.dump
localhost为数据库服务器地址(若远程访问);postgres为具有足够权限的PostgreSQL用户名;--create(创建数据库)和--clean(清空现有对象)选项。若未提前备份,可尝试以下方法恢复部分数据(成功率取决于数据损坏程度):
TestDisk(恢复分区表、文件系统)或PhotoRec(恢复丢失文件,包括数据库文件),均为开源工具,支持Ubuntu。sudo apt-get install testdisk photorec;sudo testdisk或sudo photorec;base目录下的表文件)至原位置。若已开启WAL(Write-Ahead Logging)归档,可通过重放日志恢复到故障前状态:
postgresql.conf中已设置archive_mode = on、archive_command = 'cp %p /path/to/archive/%f',并定期归档WAL文件。sudo systemctl stop postgresql;/var/lib/postgresql/<version>/main);postgresql.conf中的restore_command = 'cp /path/to/archive/%f %p',启动服务后自动重放日志;SELECT COUNT(*)、SELECT * FROM 关键表 LIMIT 10等查询,确认数据数量和内容是否符合预期。SUPERUSER或对应数据库权限的用户执行(如postgres用户)。pg_dump生成的备份文件可在同版本或更高版本的pg_restore中恢复)。