Ubuntu上PostgreSQL数据恢复指南
PostgreSQL数据恢复需根据备份类型(逻辑备份/物理备份)选择对应方法,以下是常用场景的具体步骤及注意事项:
pg_dump生成的.sql/.dump格式逻辑备份,或pg_rman生成的物理备份及WAL日志)。sudo systemctl stop postgresql
pg_restore(逻辑恢复)、pg_rman(物理恢复)等工具已安装(通常随PostgreSQL一起安装)。逻辑备份是通过pg_dump生成的文本或自定义格式文件,适合小规模数据库或跨版本恢复。
mydb.dump)。pg_restore命令,指定数据库名、备份文件路径及服务器信息。pg_restore -h localhost -U postgres -d 目标数据库名 /path/to/backup.dump
psql命令直接执行SQL文件。psql -h localhost -U postgres -d 目标数据库名 -f /path/to/backup.sql
-j:并行恢复(加速大数据量恢复,如-j 4表示4线程);--clean:恢复前清空目标数据库(慎用,会删除现有数据);-v:显示详细恢复过程。物理备份是通过pg_rman或pg_basebackup生成的数据目录快照,适合大规模数据库或PITR(时间点恢复)。
mkdir -p /var/lib/postgresql/backup
chown -R postgres:postgres /var/lib/postgresql/backup
echo "archive_mode = on" >> $PGDATA/postgresql.conf
echo "archive_command = 'cp %p /var/lib/postgresql/archive/%f'" >> $PGDATA/postgresql.conf
pg_ctl restart
pg_rman restore -B /var/lib/postgresql/backup --target-time="2025-10-01 12:00:00"
其中--target-time指定恢复到的时间点(如未指定则恢复到最新备份)。若数据库配置了流复制,可从备用服务器恢复数据到主服务器:
sudo -u postgres pg_basebackup -h standby_host -U replicator -D /var/lib/postgresql/12/main -R
-R选项会自动配置postgresql.conf中的primary_conninfo,恢复后可立即加入复制。
若备份后有WAL日志(Write-Ahead Logging),可实现精确到事务或时间点的恢复。
编辑PostgreSQL配置文件,开启归档模式并指定WAL日志路径:
restore_command = 'cp /var/lib/postgresql/archive/%f %p'
recovery_target_time = '2025-10-01 12:00:00' # 恢复到指定时间
recovery_target_action = 'promote' # 恢复完成后提升为主库
将备份文件复制到数据目录,启动PostgreSQL服务,系统会自动应用WAL日志:
sudo systemctl start postgresql
恢复完成后,检查/var/log/postgresql/postgresql-*.log确认恢复进度。
pg_restore -l backup.dump查看备份内容)。postgres)对备份文件和数据目录有读写权限。通过以上步骤,可根据备份类型选择合适的方法恢复PostgreSQL数据。逻辑备份适合常规恢复,物理备份+PITR适合需要精确时间点恢复的场景。