我无法使用 PostgreSQL 网站文章 23.3.3 中提到的 PITR 步骤将数据库恢复到以前的时间。使用在线备份恢复 ( http://www.postgresql.org/docs/8.1/static/backup-online.html#RECOVERY-TARGET-XID )
以下是我遵循的步骤:
我对位于数据文件夹中的 postgresql.conf 文件进行了以下更改:
wal_level = archive
archive_mode = on
archive_command = 'copy "%p" "C:\\archivedir\\%f"'
Run Code Online (Sandbox Code Playgroud)
我在 C 盘上创建了一个名为“archivedir”的文件夹
我对 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"'
Run Code Online (Sandbox Code Playgroud)停止了 postgresql 的服务和已删除的文件夹内容 pg_xlog
Recovery.conf
改为 recovery.done
我通过删除表并尝试将数据库恢复到较早的状态进行了多次检查。有什么我想念的吗?
首先,永远,永远pg_xlog
,永远,永远,永远,永远,删除任何东西。你会破坏你的数据库。现在,谈谈你对这一切的误解:
我通过删除表并尝试将数据库恢复到较早的状态进行了多次检查。有什么我想念的吗?
PITR 不是那样工作的。它不会将正在运行的数据库恢复到较旧的时间点。
它的工作原理是在需要恢复之前先设置它:
设置 WAL 归档,以便将 WAL 记录到安全位置。
在您需要恢复之前,您需要进行基本备份。您可以pg_start_backup()
为此使用和 rsync,但使用pg_basebackup()
. 有关创建基本备份的详细信息,请参阅文档。您必须在设置 WAL 存档后执行此操作,以便存档包含从执行 basebackup 开始的所有 WAL。
继续使用 WAL 归档运行,定期进行新的基本备份以减少您必须保留的旧 WAL 数量和您需要的恢复时间。像pgbarman这样的自动化工具可以帮助解决这个问题。
当您需要创建数据库状态的历史副本以从某些内容中恢复时,您:
将基本备份复制到可写存储
使用recovery.conf
指定适合restore_command
获取 WAL 的文件和recovery_target_time
您想要重播的文件来设置副本。设置primary_conninfo
没有意义,因为您不会将其用作暖或热备用流媒体副本。
启动副本,并允许它重放 WAL,直到它报告恢复完成。
连接到副本,然后执行任何您需要的操作来获取您希望从中恢复的数据。您可以用于pg_dump
提取数据库或其中的一部分,用于COPY
提取表的内容等。
如果您希望完全恢复数据库,您可以删除 datadir,将其替换为副本,然后按照上述步骤将副本重播到某个时间点。
您不能做的是将现有数据库回滚到过去的某个时间点。WAL 重放只会及时进行。因此,您必须恢复旧的基本备份,然后允许它在您想要的时间点重放 WAL。
归档时间: |
|
查看次数: |
2760 次 |
最近记录: |