PostgreSQL / WAL-archiving:我可以在做图像快照备份时将 archive_command 留空吗?

PostgreSQL / WAL-archiving: can I leave archive_command empty when doing image snapshot backups?

我在 Azure VM 上有一个 PostgreSQL 9.5 实例 运行。如上所述 here, I must specify a post- and a prescript to tell Azure: "Yes, I've taken care of putting the VM in a state, so the entire VM/blob can be backed up as a snapshot that can be restored as a working new VM" and "Now I'm done", thus Azure will flag the backup as Application consistent.

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

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

我只需要告诉PostgreSQL "Wait a minute / hold your data-writes (or whatever goes on), while I create a snapshot of the entire VM"。计划是先执行pg_start_backup(),拍快照,然后pg_stop_backup().

我意识到,这种方法(如果它甚至有效的话)本质上是一个文件系统级备份,according to docs, the postgres-service must be shut down for the fs-backup to be valid. Another place我读过,点击 pg_start_backup() 应该足以保证有效的独立物理备份。

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

那样的话,就不用关心WAL归档或者备份方式了。您可以设置 archive_mod = off 而不必担心。

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

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