0

最近,我读到基于 Galera 的 MySQL 集群在默认情况下对 DDL 使用称为全顺序隔离 ( https://galeracluster.com/library/documentation/schema-upgrades.html#toi ) 的概念,它会暂停整个集群上的写入,直到它在所有节点上提交。

MySQL 如何处理原生异步复制中的 DDL?它是否也会停止其他模式的写入?

4

1 回答 1

1

本机复制将 DDL 粘贴到复制流中。当命令在从站中弹出时,它会在继续执行复制流中的其他查询之前执行 DDL。

警告:上述语句假定旧式,没有多主复制或多复制线程。不管这个警告如何,正在修改的表在从站上被阻止,就像在主站上一样。

Galera 的 TOI 付出了一些额外的努力来确保所有节点同步,甚至考虑到 DDL 与普通写入。Hnece 名称“插入的总顺序”。

在许多情况下,Galera 的 RSU 是一种可行的替代方案。它并不比每个节点的崩溃更具侵入性,一次一个(因此“滚动”)。假设连接可以故障转移到不同的节点,RSU 会避免其他阻塞。

不过,您应该在 RSU 和 TOI 之间做出有意识的选择;有一些用例可以指示一个与另一个。

在分布式系统(多个节点、多个客户端等)中,推送代码变得很棘手。我喜欢采用这种方法,尽管它可能会导致 3 倍的推送:

  1. 推送应用程序代码以发现是否已推送数据库更改。让代码使用旧模式或新模式。在“滚动”庄园中“推动”
  2. 推送新架构(例如CREATE/ALTER TABLE)。
  3. 清理代码。(再次,将其“推广”给许多客户。)
于 2020-05-28T21:30:03.007 回答