繁体   English   中英

Postgres逻辑复制灾难恢复

[英]Postgres Logical Replication disaster recovery

我们希望使用Postgres逻辑复制将更改从上游服务器(“源”服务器)移动到下游服务器(“宿”服务器)。

模拟灾难恢复方案时,我们会遇到问题。 为了模拟这一点,我们在复制仍处于活动状态时删除了源数据库。 然后,我们启动一个新的源数据库,并尝试:a)将数据从接收器移到源中,以及b)设置复制。 在此阶段,根据设置复制的时间(在移动数据之前或之后),我们会收到两个错误之一。

经过上述测试后,我们得到的错误是以下其中一项:

复制插槽已在使用中,难以重新启用插槽而不删除它

LOG:  logical replication apply worker for subscription "test_sub" has started
ERROR:  could not start WAL streaming: ERROR:  replication slot "test_sub" does not exist
LOG:  worker process: logical replication worker for subscription 16467 (PID 205) exited with exit code 1

Tried amending using:
ALTER SUBSCRIPTION "test_sub" disable;
ALTER SUBSCRIPTION "test_sub" SET (slot_name = NONE);
DROP SUBSCRIPTION "test_sub";

由于PK冲突而无法创建订阅

ERROR:  duplicate key value violates unique constraint "test_pkey"
DETAIL:  Key (id)=(701) already exists.
CONTEXT:  COPY test, line 1

一些可能的解决方案:

  • 在给定的WAL记录编号之后设置逻辑复制。 这样可以避免我们面临的PK问题
  • 寻找一种在源数据库上重新创建复制插槽的方法
  • 备份Postgres服务器(包括复制插槽),然后重新导入

这是Postgres逻辑复制用例的很好分类吗? 这是典型的灾难恢复方案,因此想知道如何最好地实施。 谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM