PostgreSQL PITR还原


9

我有一个在CentOS 5.8 32位操作系统上运行的PostgreSQL 9.1服务器,并且启用了WAL归档。在此服务器上,有三个数据库:databaseA,databaseB和databaseC。有人在下午12点删除了databaseB上的一个表,我想将databaseB还原到删除表的时间之前。现在的时间是下午3点。

我如何才能将数据库B还原到下午12点,而又不会丢失其他两个数据库中三个小时的数据呢?

postgresql.conf

wal_level = archive             
archive_mode = on               
archive_command = 'test ! -f /opt/pgsql/logs/%f && cp %p /opt/pgsql/logs/%f'
max_wal_senders = 100

recovery.conf

restore_command = 'cp /opt/pgsql/logs/%f %p'
recovery_target_time = '2012-06-29 11:59:59 CEST'

我在上午9点运行了基本备份

pg_basebackup -h 127.0.0.1 -D /opt/pgsql/backup

PostgreSQL服务在下午3点关闭。

Answers:


6

我将在某个时间点恢复到其他位置,恢复到所需的时间,然后pg_dump问题数据库。我将一个数据库放到正常位置,再次创建它,并加载pg_dump输出。

在启动类似的操作之前,请确保已创建并保存集群的数据目录树的文件系统级副本。


谢谢+1的答案。您能否添加恢复到其他位置所必需的步骤,然后使用pg_restore进行恢复?有了您的回答,我正在考虑使用实际的基本备份位置进行PITR。
Craig Efrein

0

为了扩展kgrittn的答案,您还可以pg_dump仅对被删除的表执行a操作,然后在现有数据库中重建它B,因此您无需在其他表中损失6个小时的数据。


感谢您的回答,但是表之间的所有各种约束和关系都会阻止我仅恢复其中之一。
Craig Efrein
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.