标签: replication

使用 pglogic 进行 PostgreSQL 逻辑复制

我正在使用 Pglogic 和 Postgresql v9.5 测试逻辑复制。

简单的配置似乎还可以。它的意思是:

  • 在两个节点中创建pglogic扩展
  • 创建一个集合并将公共模式中的表添加到该集合中,
  • 创建一个节点并在另一台服务器中创建订阅。

但是,订阅包含特定模式中的表的新replication_set 不起作用。

该命令通过(在提供者节点中):

select pglogical.replication_set_add_all_tables(
set_name := 'new_replication_set',
schema_names := '{myschema}',
synchronize_data := 'true'
);
Run Code Online (Sandbox Code Playgroud)

该命令通过(在订阅者节点中):

select pglogical.create_subscription(
subscription_name := 'subscription',
replication_sets := array['new_replication_set'],
provider_dsn := 'host=10.20.30.40 port=6432 dbname=production user=pglogical_prod',
synchronize_data := 'true'
);
Run Code Online (Sandbox Code Playgroud)

但订阅者节点中的表是空的。

我错过了什么吗?感谢致敬。

附加信息:

  • select pglogical.alter_subscription_synchronize(...)select pglogical.alter_subscription_resynchronize_table(...)发出命令,

  • 订阅者节点中的表也处于特定模式中,

  • select * from pglogical.queue;请求不为空。

下面是从订阅者节点获取的日志消息:

我在订阅者节点中设置了 log_min_message = debug5 。

下面是错误消息:

792 < 2018-03-14 11:38:56.449 CET >LOG:  starting apply for subscription subscription
793 < 2018-03-14 …
Run Code Online (Sandbox Code Playgroud)

postgresql replication postgresql-9.5

5
推荐指数
1
解决办法
2990
查看次数

PostgreSQL - 我可以使用副本 WAL 的逻辑复制吗?

我想使用逻辑复制。然而,由于 PostgreSQL 现在的工作方式,它可以吃掉整个磁盘,然后阻塞数据库。特别是在 Amazon Web Services RDS 中,这是一个问题,因为 RDS 不会为您提供SUPERUSER角色,以便您可以连接和关闭插槽。

所以我设置了一个 RDS 副本并设置rds.logical_replication1. 但 RDS 副本似乎没有对此做出反应 -SHOW ALL虽然wal_level = hot_standby它应该如此logical

这就是我想要实现的目标:

RDS master
    WAL --> RDS replica
                logical replication ON
                WAL + wal2json  ---->    pg_recvlogical on remote client
Run Code Online (Sandbox Code Playgroud)

这可能吗?

参考:wal_level

当我尝试创建插槽时,我得到:

致命:没有来自主机“...”、用户“postgres”的复制连接的 pg_hba.conf 条目,SSL 关闭

这看起来 AWS 没有放置正确的条目pg_hba.conf- 即不允许 postgres 用户创建复制槽。

我的假设正确吗?有什么办法解决这个问题吗?

postgresql replication aws postgresql-9.5 amazon-rds

5
推荐指数
1
解决办法
4486
查看次数

单领导者(交易)相对于多领导者复制的优势

我正在阅读我衷心推荐的优秀书籍“设计数据密集型应用程序”,但我对比较多领导者(即多写入者)复制与单领导者复制的部分感到困惑。我理解基本的区别:在多领导者中,多个领导者节点可以接受写入,每个领导者将其写入发送给其他领导者,并且您有冲突解决规则来决定如何合并它们。单一领导者使用事务来解决并发。

\n\n

以下两段描述了多作者如何变得更具挑战性,因为冲突无法立即解决。我的问题是后来的。

\n\n
\n

[本段和图表描述了多领导者。] 例如,考虑一个由两个用户同时编辑的 wiki 页面,如图 5-7 [复制如下] 所示。用户 1 将页面标题从 A 更改为 B,同时用户 2 将页面标题从 A 更改为 C。每个用户\xe2\x80\x99 的更改都会成功应用于其本地领导者。但是,当异步复制更改时,会检测到冲突。在单领导者数据库中不会出现此问题。

\n\n

在单主数据库中,第二个写入器将阻塞并等待第一个写入完成,或者中止第二个写入事务,迫使用户重试写入。另一方面,在多领导者设置中,两次写入都会成功,并且仅在稍后的某个时间点异步检测到冲突。到那时,要求用户解决冲突可能为时已晚。

\n
\n\n

在此输入图像描述

\n\n

我在这里看到了多作者的困难,但我怀疑单作者会好得多。

\n\n

考虑当两个人大致同时编辑维基百科页面时最可能发生的事件链:1) 第 1 个人加载编辑页面,花费 3-5 秒编辑标题并提交。2) 第二个人加载编辑页面,花费3-5秒编辑标题并提交。应用编辑的每个数据库事务只有几毫秒,因此更新更有可能相继发生,而不是同时发生。因此,如果您担心这两个人之一的更新将会丢失,您需要以某种方式解决应用程序级别的潜在冲突;交易不会真正帮助你。

\n\n

此外,在两个事务确实重叠的情况下,用户简单地延迟其中一个事务直到另一个事务完成并没有帮助。一旦恢复,它仍然会覆盖第一个用户的数据。

\n\n

所以我的问题是,是否有一些我缺少的有用的交易技术在这里实际上有用?我已经有一段时间没有尝试使用事务了,所以我的技术已经生锈了。

\n\n

我能想到的最好的改进是:添加AND title=\'A\'到两个语句的末尾UPDATE,并向事务中添加第二个语句来检查受影响的行数,如果等于 0 则回滚。回滚不会产生任何效果,但会向客户端指示失败。但这有点hackish。

\n\n

我认为用支票开始交易没有什么帮助(即SELECT * FROM pages WHERE title=\'A\'确保你能收回一些东西)。即使只有一个交易胜出,两个交易也可能在开始时看到“A”。

\n

replication transaction

5
推荐指数
1
解决办法
1021
查看次数

Sql Server:如何从发布者查询订阅和文章列表(对于给定的发布)

在 Sql Server 2014 中,如何查询发布者给定发布的订阅及其文章列表?(事务复制)

是的,有更简单的方法可以从发行商处查询,但我需要从发行商端进行查询。

远程分销商模型(如果有帮助)

谢谢,

replication sql-server transactional-replication sql-server-2014

5
推荐指数
2
解决办法
3万
查看次数

仅在 MySQL RDS 实例的只读副本上添加索引

我已创建 RDS 生产数据库的只读副本以用于报告目的。跨团队正在使用副本供其使用。

该副本的使用者正在寻找额外的索引以加快搜索速度,但开发人员不赞成这样做(将这些索引添加到 master 中),因为需要更多时间在主数据库中插入记录。

是否可以仅在 MySQL 数据库的只读副本上添加索引?这在行业内是如何实践的?或者还有什么其他方法可以解决这个问题?

mysql replication amazon-rds

5
推荐指数
1
解决办法
6890
查看次数

当数据大小大于最大文本重复大小时生成错误

我最近遇到了一个问题,应用程序尝试插入超过最大文本重复大小的数据。这次失败的插入被应用程序日志捕获,我被告知了。我有点不安,但发现错误没有在 sql server 错误日志中捕获,而且我没有看到它在其他任何地方捕获。

任何有关如何捕获以及理想情况下根据“要复制的 LOB 数据 (XXXXXX) 长度超过配置的最大值”生成警报的建议,我们将不胜感激。

replication sql-server

5
推荐指数
1
解决办法
496
查看次数

MySQL Slave SQL 运行状态 - “等待相关事务提交”含义

我们的副本数据库上的协调器线程经常处于“等待相关事务提交”状态。

我对这意味着什么有点困惑,并且在MySQL 文档的线程状态列表中看不到这个状态。

我主要好奇“依赖事务”是否是当前在副本上的工作线程之一上运行的事务(如表中可能被锁定),或者“依赖事务”是否是在主服务器上发生的事情副本还在等什么?

mysql replication

5
推荐指数
1
解决办法
7586
查看次数

不同版本的SQL Server之间是否可以建立主从复制关系?

我有一个数据库服务器 SQL Server 2005,它位于专用网络中。现在我需要为网络服务器创建一个数据库,所以我想将此数据库复制到运行 SQL Server 2008 的外部服务器。我希望内部服务器成为主服务器,外部服务器作为从服务器。新数据每天可能会添加几次,但很少,并且应该在没有手动干预的情况下顺利复制。

这是一种可能的情况,还是我需要将内部的 SQL Server 升级到与外部相同的版本?

如果可能的话,以这种方式进行升级是否有缺点,无论如何都更推荐升级方案?

replication sql-server-2005 sql-server-2008

4
推荐指数
1
解决办法
1804
查看次数

MySQL 复制滞后行为不稳定

我有一个普通的 MySQL 复制,使用“混合”模式。

mysql slave 延迟计算的行为非常奇怪 - 一分钟是0,之后是3630秒(或类似的数字),然后回到0,依此类推。显然,复制配置有问题,因为 MySQL 根据中继日志中的时间戳计算延迟。

我试过检查服务器的时间,这是相同的(SELECT NOW()在 MySQL 中使用)。我还检查了SELECT @@system_time_zone主从上设置为 CDT的时区 ( )。

我还可以验证什么以确保此问题得到解决?有没有其他人遇到过这个问题?

mysql replication

4
推荐指数
1
解决办法
2765
查看次数

sp_repladcolumn - 是否可以提供出版物列表以添加此列?

设想

我们在 3 个不同的出版物中有一个现有表(发给 3 个不同的订阅者),其中 1 个出版物没有发布所有列。

所有这些都是事务性请求订阅。

我现在需要在此表中添加更多列,我们只想将它们添加到前两个出版物中。然而来自MSDN

[ @publication_to_add =] 'publication_to_add' 是添加新列的发布的名称。Publication_to_add 是 nvarchar(4000),默认值为 ALL。如果为 ALL,则所有包含此表的发布都会受到影响。如果指定了publication_to_add,则只有该发布添加了新列。

这意味着您希望它指定1 个出版物或所有出版物。

帮助演示问题的示例表/出版物详细信息:

表样

[MyTable] (
    ID int IDENTITY(1,1) NOT NULL,
    myName varchar(50) NULL,
    myDOB datetime,
    myJob varchar(100),
    mySpouseID int )
Run Code Online (Sandbox Code Playgroud)

发布/订阅者示例

[InternalPublication] All fields, sent to InternalAdmin system
[Reporting] All fields, sent to Reporting/Datawarehouse system
[External] sent to External accessable system, fields sent:
    (ID, myName, myDOB)
Run Code Online (Sandbox Code Playgroud)

我如何添加:

[myMarriageDate] datetime NULL,
[myDivorceDate] datetime NULL …
Run Code Online (Sandbox Code Playgroud)

replication sql-server-2005 sql-server

4
推荐指数
1
解决办法
1568
查看次数