我有一个主服务器,它将 WAL 文件存档 (并压缩) 到 中/wal/archive/
。目前,我正尝试从基础备份设置具有流式复制的热备用。
启动待机时,我注意到它产生了如下错误:
could not receive data from WAL stream: ERROR: requested WAL segment 000000010000142400000014 has already been removed
这是有道理的,因为距离 base_backup 制作已经过去了大约一天,并且 WAL 文件已经存档。我restore_command
在备用服务器中提供了一个recovery.conf
,用于将文件从主服务器 scp 过来并解压缩:
restore_command = '(set -o pipefail; scp primary_ip:/wal/archive/%f.gz /dev/stdout | pigz -d > "%p")'
奇怪的是,同样的错误一直出现。请记住,我已经测试过,当我运行上述命令并提供一个文件时,该命令是否有效。我想看看该命令是否真的在运行,所以我添加了一个 echo:
restore_command = '(set -o pipefail; echo "%f" >> /data/test.txt && scp primary_ip:/wal/archive/%f.gz /dev/stdout | pigz -d > "%p")'
我可以清楚地看到它没有运行命令,因为没有创建 /data/test.txt。用户postgres
有写入权限/data/
。在备用服务器上是否需要指定某些内容来指示它restore_command
在主服务器已经存档 WAL 文件时使用?
我的 recovery.conf 文件已根据文档。