我在 Ubuntu 10.04.2 LTS(主要和备用)上有一个 PostgreSQL 9.1.3 流复制设置。使用流式基本备份 ( pg_basebackup
) 初始化复制。该restore_command
脚本尝试使用 .从远程存档位置获取所需的 WAL 存档rsync
。
当 restore_command 脚本失败并出现退出代码 <> 255 时,一切都像文档中描述的那样工作:
启动时,备用数据库首先恢复存档位置中所有可用的 WAL,调用 restore_command。一旦到达那里可用的 WAL 的末尾并且 restore_command 失败,它就会尝试恢复 pg_xlog 目录中可用的任何 WAL。如果失败,并且已经配置了流式复制,则备用服务器会尝试连接到主服务器并从存档或 pg_xlog 中找到的最后一条有效记录开始流式传输 WAL。如果失败或未配置流复制,或者如果连接稍后断开,则备用数据库将返回步骤 1 并再次尝试从存档中恢复文件。这个从归档、pg_xlog 和通过流复制的重试循环继续进行,直到服务器停止或由触发器文件触发故障转移。
但是,当 restore_command 脚本以退出代码 255 失败(因为脚本返回失败的 rsync 调用的退出代码)时,服务器进程因以下错误而死:
2012-05-09 23:21:30 CEST - @ LOG: database system was interrupted; last known up at 2012-05-09 23:21:25 CEST
2012-05-09 23:21:30 CEST - @ LOG: entering standby mode
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(601) [Receiver=3.0.7]
2012-05-09 23:21:30 CEST - @ FATAL: could not restore file "00000001000000000000003D" from archive: return code 65280
2012-05-09 23:21:30 CEST - @ LOG: startup process (PID 8184) exited with exit code 1
2012-05-09 23:21:30 CEST - @ LOG: aborting startup due to startup process failure
所以我现在的问题是:这是一个错误,还是退出代码 255 的特殊含义在其他优秀的文档中缺失,或者我在这里遗漏了其他东西?