在進行數據恢復前,需完成以下關鍵步驟以避免二次損失:
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
中恢復)。