0

我有一个在 Azure VM 上运行的 PostgreSQL 9.5 实例。如此处所述,我必须指定一个 post- 和一个 prescript 来告诉 Azure:“是的,我已经将 VM 置于一个状态,因此整个 VM/blob 可以作为可以恢复的快照进行备份作为一个正在工作的新虚拟机”“现在我完成了”,因此 Azure 会将备份标记为应用程序一致

就 PostgreSQL 而言,我已经阅读了有关连续归档的文档,其中说明了为什么以及如何启用 WAL 归档以允许备份。我的问题来了:

如果我设置archive_mode = onand wal_level = archive,我可以archive_command留空吗,这是否有意义?或者 - 我应该在此处进行某种归档(例如将日志段复制到另一个位置/磁盘),并且在我的场景中恢复 VM 时确保数据库正常工作是否有必要进行归档?

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

我确实意识到,这种方法(如果它甚至是有效的)本质上是一个文件系统级别的备份,并且根据 docs,必须关闭 postgres-service 才能使 fs-backup 有效。我读到的另一个地方pg_start_backup()应该足以保证有效的独立物理备份。

4

1 回答 1

1

如果你打算拍的快照是真正原子的,即恢复的快照代表了文件系统在某个时间点的状态,你可以从这样的快照中重新启动数据库,它会执行崩溃恢复并上来处于一致的状态。

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

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

在这种情况下,archive_mode必须是on并且archive_command必须是仅当 WAL 文件已成功归档时才返回成功的命令。如果在您上次备份和您想要恢复数据库的时间之间只缺少一个 WAL,它将无法工作。

于 2017-05-22T12:23:11.777 回答