我们一直在努力使pr_rewind正常工作。无奈之下,我们一直在尝试使用例尽可能简单
我们有两个数据库服务器,它们以正常的“主/备用”配置在两台不同的计算机上运行Postgres 10。
两台机器都将其WAL存档日志写入同一共享驱动器(称为/ ice_dev / wal_archive)。 该配置具有以下条款
archive_mode = always
archive_command = 'test ! -f /ice-dev/wal_archive/%f && cp %p /ice-dev/wal_archive/%f'
full_page_writes = on
wal_log_hints = on
启用校验和
我们在计算机A和B上运行的过程如下:
将recovery.conf添加到A(即将成为备用数据库)。文件包含
recovery_target_timeline = 'latest' and restore_command = 'cp /ice-dev/wal_archive/%f "%p"
此时,A处于只读模式,但未复制。它的日志包含以下重复消息
2018-08-01 20:30:58 UTC [7257]: [1] user=,db=,app=,client= FATAL: could not start WAL streaming: ERROR: requested starting point 0/6000000 on timeline 1 is not in this server's history
DETAIL: This server's history forked from timeline 1 at 0/57639D0.
cp: cannot stat ‘/ice-dev/wal_archive/00000002.history’: No such file or directory
cp: cannot stat ‘/ice-dev/wal_archive/00000003.history’: No such file or directory
cp: cannot stat ‘/ice-dev/wal_archive/00000002.history’: No such file or directory
2018-08-01 20:30:58 UTC [6840]: [48] user=,db=,app=,client= LOG: new timeline 2 forked off current database system timeline 1 before current recovery point 0/6000098
cp: cannot stat ‘/ice-dev/wal_archive/000000010000000000000006’: No such file or directory
我们可以在B的wal目录中看到00000002.history文件…..但它永远不会出现在wal_archive目录中-即使我们发出结帐甚至重启服务器也没有。
00000003.history在两台计算机上似乎都不存在。
任何想法我们在做什么错了吗?
谢谢。理查德
答案 0 :(得分:0)
我目前正在调查类似的问题,这是我在PostgreSQL official docs中发现的内容:
通常,恢复将在所有可用的WAL段中进行,从而将数据库还原到当前时间点(或在可用的WAL段中尽可能接近)。 因此,正常恢复将以“找不到文件”消息结束,错误消息的确切文本取决于您选择的restore_command。 您还可能在恢复开始时看到名为00000001.history之类的文件的错误消息。这也是正常现象,在简单的恢复情况下并不表示有问题;参见Section 25.3.5进行讨论。
因此,可能的答案是-您做对了所有事情,这是设计好的行为,但是时间表可能也有问题:
恢复的默认行为是按照进行基本备份时的当前时间线进行恢复。如果希望恢复到某个子时间轴(即,要返回到尝试恢复后本身生成的某种状态),则需要在recovery.conf中指定目标时间轴ID。您无法恢复到比基本备份更早分支的时间表。
因此,您可以尝试在recovery.conf
中明确指定时间轴ID。
此外,我建议您最好在https://dba.stackexchange.com/进行提问,因为您可以在那里进一步关注针对DBA的特定问题。