首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pg_restore后引导bucardo复制

在pg_restore后引导bucardo复制
EN

Stack Overflow用户
提问于 2020-07-30 13:22:42
回答 1查看 542关注 0票数 0

目前,我正在设置不同位置的5节点之间的主/主复制(应该提供位置透明性)。该数据库保存了大约500个应该复制的表。根据它们之间的依赖性,我将它们分组为最多由50个表组成的较小的复制群。所有表都定义了主键,每个节点上的排序器被设置为提供系统范围的唯一标识(基于剩余类)。

为了在每个节点上获得一个初始数据库,我将一个--data-only自定义格式的pg_dump设置为一个文件,并通过pg_restore在每个节点上恢复这个格式。通过使用bucardo_latest策略来解决冲突,可以设置布卡多同步。现在,当我开始同步时,bucardo首先删除原始数据库中的所有数据集,然后从还原的节点中再次插入它,因为所有还原的数据集都有一个“较晚的时间戳”(我调用pg_restore的时间点)。这最终禁止了这项创业,因为布卡多需要很长时间,而且也失败了,因为有很多数据集需要解决,超时时间往往太短。

我还在每个表上都有“last_modified”时间戳,这些表由UPDATE触发器管理,但据我所知,pg_dump通过复制插入数据,因此不会触发这些触发器。

  • 布卡多用哪个时间戳来找出谁是bucardo_latest
  • 我必须用类似于pg_dump的东西给set SESSION_REPLICATION_ROLE = 'replica';打电话吗?

我只想让布卡多跟踪每一个新的更改,而不是因为恢复而执行伪更改。

编辑: pg_restore肯定在restore上触发了几个触发器,time...as说我跟踪每个表中的用户和最后修改日期,这些值在还原完成时被设置为用户和时间戳。我知道,我可以通过SESSION_REPLICATION_ROLE将psql设置为纯文本格式的还原。对于pg_restore来说,这也是可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-31 16:55:43

共同方法是在配置复制之前进行转储/还原过程。

因此,一种选择是:

  1. 删除每个数据库中的bucardo模式
  2. 为每个对象执行一个bucardo remove (大多数对象允许使用all,如bucardo remove table all )
  3. 转储/还原数据
  4. 再次配置复制。只需确保在添加同步时,设置选项onetimecopy=0。这是默认的,但我觉得说得更清楚些。

,布卡多用来找出谁是bucardo_latest?的时间戳

bucardo处理自己的时间戳值。每个表都应该有一个名为bucardo.delta_myschema_mytable的触发器,该触发器可以在名为bucardo.delta_myschema_mytable的表中生成和插入。这个表有一个列txntime timestamp with time zone not null default now(),这是使用的时间戳。

,我必须用set SESSION_REPLICATION_ROLE =‘SESSION_REPLICATION_ROLE’;?之类的东西来调用pg_dump吗?

AFAIK,如果表中已经设置了bucardo触发器,则选项--disable-triggers of pg_restore应该可以做到这一点。

您还可以查看有关使用大型数据库和使用角色的这些文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63174155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档