Postgres 流复制错误:请求的 WAL 段已被删除

var*_*447 3 postgresql master-slave

我已经在主服务器和辅助服务器之间设置了流复制。我已启用存档。在 Postgres 日志文件中,我看到以下错误。

< 2017-12-05 03:08:45.374 UTC > WARNING:  archive_mode enabled, yet archive_command is not set
< 2017-12-05 03:08:46.668 UTC > ERROR:  requested WAL segment 0000000100000000000000E3 has already been removed
< 2017-12-05 03:08:51.675 UTC > ERROR:  requested WAL segment 0000000100000000000000E3 has already been removed
< 2017-12-05 03:08:56.682 UTC > ERROR:  requested WAL segment 0000000100000000000000E3 has already been removed
Run Code Online (Sandbox Code Playgroud)

我们需要启用archive_mode = on流复制吗?如何避免上述错误?

max_wal_senders = 3
wal_keep_segements = 32
Run Code Online (Sandbox Code Playgroud)

Vao*_*sun 5

https://www.postgresql.org/docs/current/static/warm-standby.html

如果您使用流式复制而不进行基于文件的连续归档,则服务器可能会在备用服务器收到旧的 WAL 段之前回收它们。如果发生这种情况,则需要从新的基础备份重新初始化备用数据库。您可以通过将 wal_keep_segments 设置为足够大的值来避免这种情况,以确保 WAL 段不会过早回收,或者为备用数据库配置复制槽。如果您设置了可从备用数据库访问的 WAL 存档,则不需要这些解决方案,因为备用数据库始终可以使用存档来赶上,只要它保留足够的段。

强调我的。

因此,要么增加到wal_keep_segments足够大(足以满足您的块更改量),要么配置archive_command并设置一些存储以保持从主设备中删除的wals可供从设备使用。或者为备用配置一个复制槽...