首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PITR恢复PostgreSQL数据

使用PITR恢复PostgreSQL数据
EN

Database Administration用户
提问于 2014-02-05 22:06:57
回答 1查看 2.9K关注 0票数 0

我无法使用PostgreSQL网站第23.3.3条提到的PITR步骤将数据库恢复到以前的时间。使用联机备份(http://www.postgresql.org/docs/8.1/static/backup-online.html#RECOVERY-TARGET-XID)进行恢复

以下是我遵循的步骤:

  1. 我对位于数据文件夹中的postgresql.conf文件做了以下更改: wal_level = archive archive_mode = on archive_command = 'copy "%p“C:\archivedir\%f”我在C驱动器上创建了一个名为'archivedir‘的文件夹
  2. 我对recovery.conf文件做了以下更改: recovery_target_time = '2014-02-05 11:45:00 CST‘primary_conninfo = 'host=localhost port=5433 user=owner password=xxxxx’restore_command = 'copy "C:\archivedir\%f“%p”
  3. 停止postgresql服务和删除pg_xlog文件夹内容
  4. 重新开始服务
  5. Recovery.conf改为recovery.done
  6. 但是,我无法将数据库恢复到以前的状态。

通过删除表并尝试将数据库还原到更早的状态,我已经检查了多次。我遗漏了什么吗?

EN

回答 1

Database Administration用户

发布于 2014-02-06 05:03:44

首先,永远不要删除pg_xlog**中的任何内容。*您将损坏您的数据库。现在,说说你对这一切的误解:

通过删除表并尝试将数据库还原到更早的状态,我已经检查了多次。我遗漏了什么吗?

皮特不是那样工作的。它不会将正在运行的数据库恢复到旧的时间点。

它的工作方式是先设置它,然后再恢复:

  • 设置WAL归档,以便将WAL记录到一个安全的位置。
  • 在需要还原之前,先做一个基本备份。您可以为此使用pg_start_backup()和rsync,但是使用pg_basebackup()是最简单和最安全的。有关创建基本备份的详细信息,请参阅文档。您必须在设置WAL归档之后执行此操作,因此,从基片备份开始,存档包含所有WAL。
  • 继续运行WAL归档,定期进行新的基本备份,以减少必须保存的旧WAL数量和所需的恢复时间。像巴曼这样的自动化工具有助于解决这个问题。

当您需要创建数据库状态的历史副本以从某个对象恢复时,您可以:

  • 将基本备份复制到可写存储。
  • 使用一个recovery.conf文件设置副本,该文件指定一个适当的restore_command来获取WAL和您想要重放的recovery_target_time。设置primary_conninfo是没有意义的,因为您不会将其用作热备份或热备份流副本。
  • 启动副本,并允许它重放WAL,直到它报告恢复完成为止。
  • 连接到副本,并做任何您需要的事情,以获取您希望从中恢复的数据。您可以使用pg_dump提取一个或多个数据库,使用COPY提取表的内容,等等。

如果您希望完全恢复数据库,您可以删除该数据集,用该副本替换它,并按照上面的步骤将该副本重播到某个时间点。

你不能做的是把一个现有的数据库回滚到过去的某个时候。WAL回放只会及时进行。因此,您必须恢复一个旧的基础备份,然后允许它在您想要的时间点上重播WAL。

票数 7
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/58326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档