在线DDL复制MySQL当我在我的工作grFailOver POC,我还做了一些额外的并行测试。其中一个是看看网上执行DDL在一群集群复制。

在线DDL特性提供了支持即时和就地和并发DML表更改。检查小组复制(GR)官方文档,我试图确定是否存在任何限制,但我唯一发现的是:

“并发DDL和DML操作。并发数据定义语句和数据操纵语句执行对相同的对象,但在不同的服务器上使用multi-primary时不支持模式。在执行数据定义语言(DDL)语句的一个对象,执行并发数据操作语言(DML)相同的对象,而是一个不同的服务器实例执行DDL冲突的风险在不同实例没有被发现。”

这个影响只有当你有一个multi-primary场景中,这并不是建议,而不是我的情况。所以,在理论上,GR应该能够处理在线DDL没有问题。

我的情况:

组复制MySQL

我有两个DCs和我要做的动作我DC1,看看它如何传播,和它将产生何种影响。

测试

做测试,我将从选择运行和插入。

和选择,主节点gr1一起,在另一个连接执行改变:

正如你可能已经注意到,我没有明确要求原地和锁。所以在这种情况下,MySQL无法满足;它应该退出,而不是执行命令。

与此同时,其他所有节点上,我将运行一个命令查看我的改变正在发生。让我们滚球:

在我的小学,命令来插入数据:

再次主要另一个会话执行改变:

在其他节点监控改变将开始:raybet雷竞技竞猜在线官网

会发生什么

插入的数据循环。

组复制MySQL改变

改变开始,但我仍能在我的表插入数据,最重要的是,数据传播到DC1集群的所有节点。

没有改变的行动在其他节点上。

修改完成后在本地节点(主)然后执行(广播)参与集群的所有节点。

但是写的是暂停,等待:

最终,它会超时。

另一点是,任何写挂起直到节点申请改变最慢。重要的是要注意,所有节点,不仅主,仍等待等待缓慢的节点:t他慢的驱动器。

GR3:

GR2:

最后,当集群中的最后一个节点GR应用改变,写简历,和副本节点DC2将首先启动主节点的ALTER操作,然后在其他节点上。

总结:

  1. 主要写执行
  2. 改变在主节点上执行
    • DDL不影响写操作和尊重不阻塞指令。
  3. 改变是完成小学和传递给所有节点
    • 元锁在节点
  4. 所有集群等待最慢的节点完成
  5. 当所有在DC1那么行动是DC2的复制
    • 转到2

结论

看来,目前我们有部分的报道在线ddl当使用group_replication特性。当然,必须等待二级节点和更少的影响比等主要第一中学。

但它是令人困惑,因为我希望有完整的在线报道(我曾明确要求,在DDL命令)或一个消息告诉我不能在线执行。当然,我更希望有完整的在线报道。,0)

请记住我的设置也非常标准,改变group_replication_consistency不影响结果。但不确定我可以把这归为一个错误,更意外的不良行为。

订阅
通知的
客人

7评论
最古老的
最新的 大多数投票
内联反馈
查看所有评论
Shlomi Noach

马克,谢谢你的这些信息!我很好奇:如果迁移完成后在主,一秒钟之后你杀主?意思,中学都开始运行复制改变,但阻挡插入。如果你杀主,所有写在中学和最终将应用,还是插入损失?

马可

有趣的问题,我以后会回归到你的答案。没有跟踪特定的一个。

图萨马可(令人扫兴的人)

Shlomi,

结果:

主要完成当地手术后辅助节点开始改变。
——写在小学
——杀主
——辅助节点无法选出主虽然在本地应用改变。
——写仍锁定(没有初级选举)
——第一中学完成改变,成为初级,但仍然被metalock锁定
——第二次要完成改变
——锁了
——继续写道。

所以我们仍然锁但数据插入在网上段主要是正确复制,然后修改表按预期辅助节点和集群没有问题。

谢谢你马克!系统是群龙无首的时间改变在次要的,因为没有一个辅助加强为主,直到所有(?)完成改变,如果我理解正确。意思,如果10小时改变在主节点上完成,下一个10小时是一个可用性风险:如果主下降在未来10小时,系统实际上是只读的,如果我理解正确。超级有趣!

图萨马可

正确的。
总之从测试,最快的二次将成为主要的。然后等待metalock给其余次要仍然是处理。

伊万·鲍多

谢谢分享!
我恭敬地不同意,对我来说这无疑是一个错误。
它至少应该被记录和一个警告…
希望它可以解决在未来,添加索引是相当常见的。

图萨马可(令人扫兴的人)

伊凡,如果你指的是事实我们不得到一个错误当特别要求“算法=原地,锁=没有”然后我同意。我们应该得到一个消息说Onlne DDL不能遵循我们的要求执行。
说,DDL的方式处理(在线在主)然后锁有它自己的逻辑,是我们在某种程度上比钢铁洪流Galera。
在任何情况下我想在线尊重同样在二级,但我会听从甲骨文。
最后总是记住,为了避免这种行为我们可以使用PT-OSC (PT在线模式变化),我们要做的不兼容的更改。这将减少锁定“时刻”。
谢谢你阅读这个博客