MySQL中的星形拓扑

我有一个中央数据库,MySQL 5.1中的所有数据都是最新的。 我想在主 – 主关系中连接多个客户端。


如何在一个中央服务器上安装一个带有多个客户端数据库的中央服务器,以便一个客户端中的更改首先传播到中央服务器,并从那里传播到所有其他客户端数据库?

数据库信息
我为所有表使用inno-db,并启用了二进制日志。
除此之外,我已经学会了如何做主数据库之间的主人。
所有表都具有主键主整数自动增量。 在自动增量偏移和启动被调整到不同的客户端数据库的地方永远不会有主键冲突。

为什么我要这个
我有客户端软件(不是网站或php)连接到笔记本电脑上的本地MySQL数据库,这需要同步到一个中央数据库,以便所有使用笔记本电脑上的程序的人都能看到其他人做出的所有其他更改。
我不想直接连接到中央数据库,因为如果笔记本电脑和中央数据库之间的互联网连接断开,我的应用程序就会死亡。
在这种设置中,应用程序继续进行,笔记本电脑只是在重新build立与中央数据库的连接之前不会从其他人那里获得更新。

有一个具体的原因,为什么你提出是不可能实现与MyISAM和InnoDB。

星型拓扑结构保证师父是宇宙的中心,而不是奴隶。 MySQL复制的目的不是让一个从设备同时从多个主设备读取数据。 它一次只能从一个主人读取。 CHANGE MASTER TO命令将一个从站连接到一个主站,而只有一个主站。

根据“ 理解MySQL内部原理一书小标题“Multi-Master”下的第2段第2段说:

MySQL复制最初并没有考虑到多主控的支持。 从机本身只能复制一个主机。 可以创build一个相当简单的修补程序,以允许一个从服务器从多个主服务器收集更新而无需解决冲突。 这是一次完成的,但由于一些原因,并没有将其纳入源树的主要分支。 一个更复杂的补丁可以解决一些冲突,但是由于一些原因,这个补丁并没有发展。 它可能会在未来实施。

高性能MySQL:优化,备份,复制”这本书在第364页(第8章:复制拓扑)的顶部有一个框,标题是“MySQL不支持多主复制” 。 该框有以下几段:

我们使用术语“ 多主复制”来描述具有多个主控的从站。 不pipe你可能被告知了什么,MySQL(不同于其他一些数据库服务器)目前不支持图8-6所示的configuration。 但是, 我们将在本章稍后介绍一些模拟多主机复制的方法

不幸的是,许多人随便用这个术语来描述在整个拓扑结构中有多于一个主设备的任何设置,比如本章后面将要介绍的“树状”拓扑结构。其他人用它来描述我们所说的主 – 主设备复制,其中服务器是相互主和从。

这些术语问题引起了很多混乱甚至争论,所以我们认为最好小心点名。 试想一下,如果MySQL增加了对两个主站的从站的支持,通信将会是多么的困难! 如果你没有保留“多主复制”的目的,你会用什么术语来描述?

虽然仿真技术列在副标题“仿真多主复制”下的第373-375页在理论上是可能的(使用BLACKHOLE存储引擎),并且已经被其他人成功实现以模仿仅两个主设备,但它仍然不能支持您特定的所提议的拓扑。

我以前曾经提过这个问题 。 事实上,我给出的答案一直都是成功的。 这就是为什么保险销售人员可以把笔记本电脑带到一个人的房子,并为申请保险的人收集保险数据。 推销员最终将连接到一台中央计算机下载一个新的客户的应用程序。 反过来,中央电脑也可以下载最新的精算师信息,以便对保单申请费用进行评估。 它的工作原理是将笔记本电脑连接到中央计算机,一次连接一台笔记本电脑。

这是不可能的,Mysql只支持多主 – 主循环复制。

本文很好地描述了这种复制。

重要更新我立场纠正。 虽然理论上我在这里所说的一切都是正确而有效的,但MySQL实际上并不支持多主复制,原因我不知道。 但是,其他数据库服务器确实支持这种拓扑结构,因此如果需要真正的主 – 主星形拓扑,则同样需要更改为不同的服务器。

我不同意@lg,我认为这是可能的。 (对不起,这个“答案”缺乏细节,我没有一个MySQL数据库在我面前,从来没有这样做过,但这里有更多的东西比适合在评论。)

在MySQL master-master复制中,两台服务器都扮演主从的angular色, 同样,在master-master-etc循环重复中,所有的服务器都是主从服务器。

从另一个angular度来说,MySQL完全有能力将一个主服务器复制到多个从服务器上 – 我们在之前的工作中已经设置了这个(主服务器到3个从服务器)。

既然我们知道一个主人也可以成为一个奴隶,而且我们知道一个主人可以拥有多个奴隶,而且我们知道(从循环复制的方式来说)复制的语句可以放入二进制日志中) 并且服务器可以在自己的主服务器的二进制日志中标识自己的语句(这是让循环复制场景中的“第一个”服务器再次复制自己的语句并使其无限循环的原因)相当合理的是,你可以build立一个主服务器的多个从服务器,它本身就是一个多主服务器的从服务器(这也是我所知道的,因为MySQL支持多主服务器复制以实现单一的实时备份多个服务器)。

现在,我承认,我不能提供具体的设置,我很乐意承认你不太可能在这个非常规的设置上得到很多(如果有的话)支持,但是这里一些提示让你开始:

  1. 所有的服务器应该设置为日志复制语句(按照通常的循环复制,如@lg链接到的文章)。
  2. “发言”(缺乏更好的术语)服务器应与中央“中心”服务器build立主 – 主关系。

这应该很容易testing – 你说你已经build立了一个主 – 主关系,所以现在build立一个主 – 主关系的三分之一,无论你想成为中心“枢纽”,然后看看复制是否按照你想要的方式工作(尽pipe记住第1步 – 我相信典型的主 – 主不会把复制的语句放到binlog中)。