Postgres 连续归档和时间点恢复 (PITR)



我正在尝试在Postgres中设置连续存档和时间点恢复(PITR)。当我浏览文档时,它说:

存档

命令通常应设计为拒绝覆盖任何预先存在的存档文件。这是一项重要的安全功能,可在管理员出错时保持存档的完整性(例如将两个不同服务器的输出发送到同一存档目录)。

但是当我打开连接并不时进行一些更改时,我看到同一个 WAL 文件多次更改。因此,例如,当我第一次连接数据库并进行一些更改(例如删除或插入一些行)时,它会创建一个名为000000010000000000000090的 WAL 文件,并且我的archive_command会立即运行。我archive_command是

test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f

这是基于文档,该文档检查文件是否已存在于存档目录中,如果存在,则不会复制,并且仅在文件不存在时才复制。因此,第一次条件通过并复制文件时,但是当我使用相同的连接进行更多更改时(当我从同一台PC重新连接时,我什至遇到了相同的问题),原始WAL文件正在更改。但是下次副本不起作用,因为文件已经存在。

如果允许这种情况发生,我们可能会丢失备份中的一些更改。任何人都知道任何解决方案,因此它为每个更改创建一个新文件而不是修改旧文件?

我在本地计算机 (Mac) 上使用 Postgres 版本 10.2。

这真的发生在你身上吗?因为它不应该。

PostgreSQL将事务日志写入16MB大小的"WAL文件"(WAL为预写日志)。

每当 WAL 文件已满时,日志将切换到新的 WAL 文件,并将旧的 WAL 文件与archive_command一起存档。

如果archive_command完成且退出状态为 0(成功),则回收 WAL 文件,否则将重试存档,直到成功。将记录失败。

无论如何,只要没有错误,每个WAL文件只会存档一次

您描述的行为不应该发生。

检查 PostgreSQL 日志以查看是否有从archive_command报告的错误。如果修复错误条件。将恢复正常操作。

最新更新