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 关键表;等查询,确认数据数量和内容正确。