我们使用PostgreSQL10,并使用pg_basebackup --pgdata=- -X fetch --format=tar进行备份。根据我们的数据库大小,备份可能需要几个小时。因此,我们通过运行SELECT max(modification)-min(modification) FROM pg_ls_waldir()检查备份花费了多长时间,以及wal_keep_segments参数的等效WAL保留率是多少。
然而,相同wal_keep_segments的等效WAL保留率变化很大,而WAL保留率下降太低,我们的备份因WAL段被删除而失败。
pg_basebackup: could not get write-ahead log end position from server:
ERROR: requested WAL segment 000000010001DDE200000034 has already been removed有没有一种方法可以直接配置WAL保留而不是WAL段的数量?另外,什么可能会导致此问题?
这是我们数据库的WAL保留图。一些阶跃增加是由于增加了wall_keep_segments,但波动模式不是。

发布于 2019-01-12 04:46:20
最好的方法是使用--wal-method=stream而不是--wal-method=fetch。这实际上是从PostgreSQL 10开始默认启用的。
pg_basebackup --format=tar --wal-method=stream --gzip --compress=9 --pgdata=.你会在输出目录中得到两个文件-- base.tar.gz和pg_wal.tar.gz。但您将失去使用更好的压缩程序或通过网络轻松传输数据的能力。
或者,您可以在备份中禁用wal存档,并使用archive_command实际存档所有wal文件。在恢复备份时,您需要为recovery.conf设置相应的restore_command。这还允许您使用时间点恢复,这将证明是非常有用的。
https://stackoverflow.com/questions/54152937
复制相似问题