我正在使用 Pglogic 和 Postgresql v9.5 测试逻辑复制。
简单的配置似乎还可以。它的意思是:
但是,订阅包含特定模式中的表的新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 现在的工作方式,它可以吃掉整个磁盘,然后阻塞数据库。特别是在 Amazon Web Services RDS 中,这是一个问题,因为 RDS 不会为您提供SUPERUSER角色,以便您可以连接和关闭插槽。
所以我设置了一个 RDS 副本并设置rds.logical_replication为1. 但 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 用户创建复制槽。
我的假设正确吗?有什么办法解决这个问题吗?
我正在阅读我衷心推荐的优秀书籍“设计数据密集型应用程序”,但我对比较多领导者(即多写入者)复制与单领导者复制的部分感到困惑。我理解基本的区别:在多领导者中,多个领导者节点可以接受写入,每个领导者将其写入发送给其他领导者,并且您有冲突解决规则来决定如何合并它们。单一领导者使用事务来解决并发。
\n\n以下两段描述了多作者如何变得更具挑战性,因为冲突无法立即解决。我的问题是后来的。
\n\n\n\n\n\n\n[本段和图表描述了多领导者。] 例如,考虑一个由两个用户同时编辑的 wiki 页面,如图 5-7 [复制如下] 所示。用户 1 将页面标题从 A 更改为 B,同时用户 2 将页面标题从 A 更改为 C。每个用户\xe2\x80\x99 的更改都会成功应用于其本地领导者。但是,当异步复制更改时,会检测到冲突。在单领导者数据库中不会出现此问题。
\n\n在单主数据库中,第二个写入器将阻塞并等待第一个写入完成,或者中止第二个写入事务,迫使用户重试写入。另一方面,在多领导者设置中,两次写入都会成功,并且仅在稍后的某个时间点异步检测到冲突。到那时,要求用户解决冲突可能为时已晚。
\n
我在这里看到了多作者的困难,但我怀疑单作者会好得多。
\n\n考虑当两个人大致同时编辑维基百科页面时最可能发生的事件链:1) 第 1 个人加载编辑页面,花费 3-5 秒编辑标题并提交。2) 第二个人加载编辑页面,花费3-5秒编辑标题并提交。应用编辑的每个数据库事务只有几毫秒,因此更新更有可能相继发生,而不是同时发生。因此,如果您担心这两个人之一的更新将会丢失,您需要以某种方式解决应用程序级别的潜在冲突;交易不会真正帮助你。
\n\n此外,在两个事务确实重叠的情况下,用户简单地延迟其中一个事务直到另一个事务完成并没有帮助。一旦恢复,它仍然会覆盖第一个用户的数据。
\n\n所以我的问题是,是否有一些我缺少的有用的交易技术在这里实际上有用?我已经有一段时间没有尝试使用事务了,所以我的技术已经生锈了。
\n\n我能想到的最好的改进是:添加AND title=\'A\'到两个语句的末尾UPDATE,并向事务中添加第二个语句来检查受影响的行数,如果等于 0 则回滚。回滚不会产生任何效果,但会向客户端指示失败。但这有点hackish。
我认为用支票开始交易没有什么帮助(即SELECT * FROM pages WHERE title=\'A\'确保你能收回一些东西)。即使只有一个交易胜出,两个交易也可能在开始时看到“A”。
在 Sql Server 2014 中,如何查询发布者给定发布的订阅及其文章列表?(事务复制)
是的,有更简单的方法可以从发行商处查询,但我需要从发行商端进行查询。
远程分销商模型(如果有帮助)
谢谢,
replication sql-server transactional-replication sql-server-2014
我已创建 RDS 生产数据库的只读副本以用于报告目的。跨团队正在使用副本供其使用。
该副本的使用者正在寻找额外的索引以加快搜索速度,但开发人员不赞成这样做(将这些索引添加到 master 中),因为需要更多时间在主数据库中插入记录。
是否可以仅在 MySQL 数据库的只读副本上添加索引?这在行业内是如何实践的?或者还有什么其他方法可以解决这个问题?
我最近遇到了一个问题,应用程序尝试插入超过最大文本重复大小的数据。这次失败的插入被应用程序日志捕获,我被告知了。我有点不安,但发现错误没有在 sql server 错误日志中捕获,而且我没有看到它在其他任何地方捕获。
任何有关如何捕获以及理想情况下根据“要复制的 LOB 数据 (XXXXXX) 长度超过配置的最大值”生成警报的建议,我们将不胜感激。
我们的副本数据库上的协调器线程经常处于“等待相关事务提交”状态。
我对这意味着什么有点困惑,并且在MySQL 文档的线程状态列表中看不到这个状态。
我主要好奇“依赖事务”是否是当前在副本上的工作线程之一上运行的事务(如表中可能被锁定),或者“依赖事务”是否是在主服务器上发生的事情副本还在等什么?
我有一个数据库服务器 SQL Server 2005,它位于专用网络中。现在我需要为网络服务器创建一个数据库,所以我想将此数据库复制到运行 SQL Server 2008 的外部服务器。我希望内部服务器成为主服务器,外部服务器作为从服务器。新数据每天可能会添加几次,但很少,并且应该在没有手动干预的情况下顺利复制。
这是一种可能的情况,还是我需要将内部的 SQL Server 升级到与外部相同的版本?
如果可能的话,以这种方式进行升级是否有缺点,无论如何都更推荐升级方案?
我有一个普通的 MySQL 复制,使用“混合”模式。
mysql slave 延迟计算的行为非常奇怪 - 一分钟是0,之后是3630秒(或类似的数字),然后回到0,依此类推。显然,复制配置有问题,因为 MySQL 根据中继日志中的时间戳计算延迟。
我试过检查服务器的时间,这是相同的(SELECT NOW()在 MySQL 中使用)。我还检查了SELECT @@system_time_zone主从上设置为 CDT的时区 ( )。
我还可以验证什么以确保此问题得到解决?有没有其他人遇到过这个问题?
我们在 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)