我们使用postgresql 10并使用pg_basebackup --pgdata=- -X fetch --format=tar
进行备份。
根据我们数据库的大小,备份可能需要花费几个小时。
因此,我们通过运行wal_keep_segments
来检查备份花费了多长时间以及SELECT max(modification)-min(modification) FROM pg_ls_waldir()
参数的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的增加,但是挥舞的方式不是。
答案 0 :(得分:1)
最好的方法是使用--wal-method=stream
而不是--wal-method=fetch
。实际上默认情况下是从PostgreSQL 10开始启用的。
pg_basebackup --format=tar --wal-method=stream --gzip --compress=9 --pgdata=.
您将在输出目录中获得2个文件-base.tar.gz和pg_wal.tar.gz。但是您将失去使用更好的压缩程序或轻松通过网络传输数据的能力。
或者,您可以在备份中禁用wal归档,并使用archive_command
实际归档所有wal文件。恢复备份时,您需要为restore_command
设置一个相应的recovery.conf
。这也将允许您使用时间点恢复,这可能会非常有用。