我在流复制中配置了两台 Postgresql 9.5 服务器。日志文件中没有错误,服务器似乎是同步的。
大师 postgresl.config
archive_command = 'test ! -f mnt/server/archivedir/%f && cp %p mnt/server/archivedir/%f'
wal_keep_segments = 32
其他一切几乎都是默认的。然而我在存档目录中有 1600 多个文件!由于篇幅限制,我敢于删除其中的一些。我想弄清楚是什么原因造成的。我还看到同一目录的从属服务器上只有非常旧的文件。
我唯一能想到的是我最近对数据库进行了还原。我删除了数据库,创建了它并进行了备份还原。我这样做了好几次。奴隶似乎已经赶上了变化。但是对于每个备份还原,我在存档文件夹中都有大量的 WAL 文件。希望对可能发生的事情有所了解。
wal_keep_segments
告诉它要在目录中保留多少文件pg_xlog
,而不是存档目录。PostgreSQL 不会为您管理存档目录,这取决于您。它甚至不知道存档位置在哪里(或什么),这就是为什么它要求您提供archive_command,而不仅仅是一个目录。就 PostgreSQL 而言,您的存档命令可以通过 od 传递文件,将输出发送到带有无酸纸的行式打印机,然后将其放入 3 环活页夹中并将它们存储在您的阁楼中。虽然更常见的是加密它们并将它们上传到亚马逊的 S3,比如说。
两者一起使用有点奇怪,至少对于相对简单的设置来说是
wal_keep_segments
这样archive_command
。如果您只想要一个流式副本并且不需要进行时间点恢复的能力,您可以完全关闭归档。如果您确实想继续使用存档但在不再需要文件时将其清理,您可以使用该
archive_cleanup_command
设置。但是现在我们有了流复制和复制槽,这几乎已经过时了。正如我在这篇文章https://stackoverflow.com/a/63401901/10043142中所说的那样,PostgreSQL Wiki ( https://wiki.postgresql.org/wiki/Streaming_Replication ) 在下面的文章第 5 步中说了一些重要的事情: