PostgreSQL / WAL-archiving:在进行映像快照备份时,我可以将archive_command留空吗?

时间:2017-05-22 10:01:28

标签: postgresql azure wal

我有一个运行Azure VM的PostgreSQL 9.5实例。正如here所述,我必须指定一个后期和一个处方来告诉Azure:“是的,我已经处理好将VM置于某个状态,因此可以备份整个VM / blob作为可以恢复为工作新VM的快照“”现在我已完成“,因此Azure会将备份标记为Application consistent

就PostgreSQL而言,我已阅读the docs on continuous archiving,其中说明了为什么以及如何启用WAL存档以允许备份。这是我的问题:

如果我设置archive_mode = onwal_level = archive,我可以将archive_command留空,这是否有意义?或者 - 我应该在这里进行某种存档(例如将日志段复制到另一个位置/磁盘),这是否需要在我的方案中恢复VM时确保工作数据库的存档?

我只需告诉PostgreSQL “等一下/保持数据写入(或其他任何事情),同时创建整个VM的快照”。计划是先执行pg_start_backup(),拍摄快照然后再pg_stop_backup()

我确实知道,这种方法(如果它甚至有效)基本上是文件系统级备份,而according to docs,必须关闭postgres-service才能使fs-backup有效。 Another place我已经读过,点击pg_start_backup()应足以保证有效的独立物理备份。

1 个答案:

答案 0 :(得分:1)

如果您计划拍摄的快照是真正原子的,也就是说,恢复的快照代表某个时间点的文件系统状态,您只需从这样的快照重新启动数据库,它就会执行崩溃恢复并且处于一致的状态。

在这种情况下,无需关心WAL归档或备份模式。你可以设置archive_mod = off而不用担心它。

如果快照不是真正的原子,或者您想要时间点恢复(将数据库还原到备份之间的某个时间点的能力) ,你需要WAL归档设置和运行,因为你需要WALs将数据库恢复到一致的状态。

在这种情况下,archive_mode必须是on,而archive_command必须是只有在WAL文件成功归档后才能返回成功的命令。如果在上次备份和恢复数据库的时间之间只缺少一个WAL,则无法正常工作。