经常有客户问我们,是否可以在MySQL中使用多重主机做简单的复制工作。如果能够使用多重主机、主机之间可以完美地进行数据同步、您也可以使用自己所喜欢的工具和配置,那是多么美好的一件事啊。唯一的问题是:这是不可能实现的。

虽然,你可以这样做,但是从最终结果来看,你不应当这样做,因为最终系统会崩溃。如果系统崩溃了,你会感到很沮丧,一切完好的数据全部丢失了。为什么呢?这是否摧毁了您的提问呢?关于这个问题,Percona有一个很好的PPT说明,展现了最流行的多重主机复制的状况(制作于2013年):

http://www.percona.com/live/mysql-conference-2013/sessions/state-art-mysql-multi-master-replication

这种设置的主要问题就是:(系统会产生)冲突性的解决方案和问题规避方法,即便您能够检测到两个用户在不同的服务器上对相同数据进行更改,您可以采用加锁、协调等方法也可以在事后解决该问题,但是,各种解决方案会变得一团糟,会使系统性能变得最糟。

该问题以及其它一些问题都受到分布式系统的CAP原理的限制。该问题通常会导致集群产生,而集群是很混乱的、难以管理和修复的、其工作原理也是难以完全理解的。Galera是同步复制、有很好的锁定功能,Tungsten是能够保证最终一致性的,但是冲突解决方面难以手动管理。

我有另外一篇单独的博客,论到MySQL的高可靠性系统,但是这些系统要么是主从系统,要么就是真正的集群系统,都不是使用MySQL复制引擎的,而是使用Galera或Tungsten复制器的。到目前为止,您要么采用主从机模式,要么采用基于Galera/Tungsten的集群器。将来会有很多先进的复制方式产生,如MariaDB 多源复制、Tungsten冲突解决等等。