ubuntu

Ubuntu上PostgreSQL如何进行数据恢复

小樊
45
2025-10-12 09:11:30
栏目: 云计算

Ubuntu上PostgreSQL数据恢复指南

PostgreSQL数据恢复需根据备份类型(逻辑备份/物理备份)选择对应方法,以下是常用场景的具体步骤及注意事项:

一、准备工作

  1. 确认备份文件:确保拥有有效的备份文件(如pg_dump生成的.sql/.dump格式逻辑备份,或pg_rman生成的物理备份及WAL日志)。
  2. 停止PostgreSQL服务(可选但推荐):若恢复完整数据库或物理备份,停止服务可避免数据冲突。
    sudo systemctl stop postgresql
    
  3. 安装必要工具:确保pg_restore(逻辑恢复)、pg_rman(物理恢复)等工具已安装(通常随PostgreSQL一起安装)。

二、逻辑备份恢复(常用:pg_dump/pg_restore)

逻辑备份是通过pg_dump生成的文本或自定义格式文件,适合小规模数据库或跨版本恢复。

1. 图形界面恢复(pgAdmin)

2. 命令行恢复(pg_restore)

三、物理备份恢复(pg_rman/流复制)

物理备份是通过pg_rmanpg_basebackup生成的数据目录快照,适合大规模数据库或PITR(时间点恢复)。

1. 使用pg_rman恢复

2. 使用pg_basebackup恢复(流复制)

若数据库配置了流复制,可从备用服务器恢复数据到主服务器:

sudo -u postgres pg_basebackup -h standby_host -U replicator -D /var/lib/postgresql/12/main -R

-R选项会自动配置postgresql.conf中的primary_conninfo,恢复后可立即加入复制。

四、WAL日志恢复(时间点恢复PITR)

若备份后有WAL日志(Write-Ahead Logging),可实现精确到事务或时间点的恢复。

1. 配置postgresql.conf

编辑PostgreSQL配置文件,开启归档模式并指定WAL日志路径:

restore_command = 'cp /var/lib/postgresql/archive/%f %p'
recovery_target_time = '2025-10-01 12:00:00'  # 恢复到指定时间
recovery_target_action = 'promote'  # 恢复完成后提升为主库

2. 启动恢复

将备份文件复制到数据目录,启动PostgreSQL服务,系统会自动应用WAL日志:

sudo systemctl start postgresql

恢复完成后,检查/var/log/postgresql/postgresql-*.log确认恢复进度。

五、注意事项

  1. 备份文件完整性:恢复前检查备份文件是否损坏(如pg_restore -l backup.dump查看备份内容)。
  2. 权限问题:确保执行恢复命令的用户(如postgres)对备份文件和数据目录有读写权限。
  3. 测试恢复:定期在测试环境模拟恢复流程,确保备份有效。
  4. 避免写入:恢复过程中避免对目标数据库进行写操作,防止数据覆盖。
  5. 版本兼容性:备份与恢复的PostgreSQL版本需一致或兼容(如12备份可恢复到13,但13备份无法恢复到12)。

通过以上步骤,可根据备份类型选择合适的方法恢复PostgreSQL数据。逻辑备份适合常规恢复,物理备份+PITR适合需要精确时间点恢复的场景。

0
看了该问题的人还看了