Postgres恢复复制,时间轴冲突


1

我有一个postgres数据库(版本9.4)与流复制(主,从配置)。让我们调用master db A和slave db B.

运行A的服务器出现故障,我们不得不进行切换,我们将B升级为新的主服务器。 到目前为止,这一切都很好,工作正常。

现在我已经恢复了损坏的服务器并希望再次设置复制,因此A可以成为新的从属服务器。 所以,我从B中获取备份,将其放入服务器A,设置恢复文件并启动它。这里的问题是它不再真正起作用,因为它说它们分为两个不同的时间线。

以下是来自A(新奴隶)的消息:

2015-10-30 14:28:04 LOG:  database system was shut down in recovery at 2015-10-30 14:27:28 CET 
2015-10-30 14:28:04 LOG:  entering standby mode 
2015-10-30 14:28:04 LOG:  redo starts at 1A/5802B1A8 
2015-10-30 14:28:04 LOG:  consistent recovery state reached at 1A/581FA248 
2015-10-30 14:28:04 LOG:  record with zero length at 1A/581FA248 
2015-10-30 14:28:04 LOG:  database system is ready to accept read only connections 
2015-10-30 14:28:05 LOG:  started streaming WAL from primary at 1A/58000000 on timeline 2 
2015-10-30 14:28:07 ERROR:  requested starting point 19/FE000000 on timeline 1 is not in this server's history 
2015-10-30 14:28:07 DETAIL:  This server's history forked from timeline 1 at 19/FDCF9BA0. 
2015-10-30 14:28:12 ERROR:  requested starting point 19/FE000000 on timeline 1 is not in this server's history 
2015-10-30 14:28:12 DETAIL:  This server's history forked from timeline 1 at 19/FDCF9BA0.

我的恢复文件如下:

standby_mode = 'on'
primary_conninfo = 'host=serverB port=5432 user=replication-user'
restore_command = 'copy "Z:\\pg_xlog\\%f" "%p"'
archive_cleanup_command = '"C:\\Program Files\\PostgreSQL\\9.4\\bin\\pg_archivecleanup" "Z:\\pg_xlog" "%r"'
trigger_file = 'Z:\\trigger\\pgsql.trigger.sekasto021'
recovery_target_timeline = 'latest'

谷歌搜索我发现几乎相同的问题 这里 但没有答案。 找到了一个页面 迈克尔帕奎尔 谁确实描述了发生在我身上的事情(虽然他说从版本9.3开始没有问题)。他说:

FATAL:  timeline 2 of the primary does not match recovery target timeline 1

这只能通过从主站复制WAL段来解决   节点或使用WAL归档。

但遗憾的是,我不知道他的意思是通过使用墙存档从主人那里复制wal段。

欢迎任何帮助/指导。 谢谢

更新:我发布了 这个问题 在stackoverflow上被要求把它放在这里


Answers:


0

现在我已经恢复了损坏的服务器并希望再次设置复制,因此A可以成为新的从属服务器。所以,我从B中获取备份,将其放入服务器A,设置恢复文件并启动它。这里的问题是它不再真正起作用,因为它说它们分为两个不同的时间线。

然后你没有正确地从B进行备份。它从日志中看起来就像你正试图启动它 旧的副本 A作为B的复制品。这是行不通的。

您必须从A中删除/重命名旧数据目录。然后使用 pg_basebackup 做一个B的新备份

(还有其他方法 - 参见手册 - 但这是最​​简单和最容易实现的)。

时间线切换后的流复制问题与您当前的问题无关。


谢谢你,谢谢你,谢谢你。我的备份不正确。我正确地支持B服务器,但是从其他服务器我混淆了位置并从另一个复制数据库复制备份,这就是时间轴不匹配的原因。
Keyjote

0

正如Craig Ringer所说,我做了一个新的备份并检查了一下,在设置了奴隶服务器后,它工作了。

但是当我正在做所有的事情时,我还记得有一个旧的服务器,它也是旧主数据库(A)的奴隶(该服务器应该没有运行,这就是为什么我最初没有想到它) 。 无论如何,在把旧奴隶带走后,又做了备份并再次恢复,它只是起作用了。

正如我所说,我最初认为这是因为备份不好,但它最终成为第三个服务器(第二个从数据库)产生的错误消息。 为了证明我的观点,我启动了旧服务器并再次收到错误消息。

2015-10-31 10:26:37 CET ERROR:  requested starting point 19/FE000000 on timeline 1 is not in this server's history
2015-10-31 10:26:37 CET DETAIL:  This server's history forked from timeline 1 at 19/FDCF9BA0.

因此,似乎复制工作正常,但第二次复制完成的错误消息让我失望。

再次感谢克雷格的帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.