Answers:
按照设计,一个mysqld进程不能同时收听两个不同的Master。
CHANGE MASTER TO命令仅允许您将一个Master设置为读取源。
为了模拟这一点,您必须以编程方式在两个Master之间进行切换。你是怎样做的 ?
我在StackOverflow中介绍了如何手动将一个从站连接到不同的主站,其中每个主站都是一台笔记本电脑,而从站是中央计算机。
这是基本思路
设置将M1复制到S1,然后将M2复制到S1
每次从一个主设备切换到另一个主设备时,都必须记录以下两个值 SHOW SLAVE STATUS\G
这两个值表示来自主服务器的下一个SQL语句,该语句随后将在从服务器上执行。
有一个主要警告:只要M1和M2正在更新互斥数据库,此算法就可以了。
信不信由你,我在2011年5月的ServerFault中解决了这样的问题。我实际上解释了如何基于《高性能MySQL》这本书使用BLACKHOLE存储引擎来模拟真正的多主控/单从属。
罗兰多的解决方案有很多警告。第一个是一个副本流,而另一个工作时不一定要复制。这将为您提供一段时间,使您的奴隶不同步。您现在必须扮演一个微妙的平衡角色,以确保每个人都有足够的时间在“转弯”时追赶。
如前所述,您还必须扮演日志位置的簿记员才能切换回。这确实似乎是错误的,打开窗口以查找丢失或不一致的数据,或者在出现错误时甚至中断复制(这可能是由于日志位置出现“仅由一个错误”引起的)
我建议只运行多个mysql实例。没有什么可以阻止您在同一台计算机上运行两个或多个mysql。它们当然不能同时在同一端口上运行。尽管每个客户端和库都允许您指定3306以外的其他内容,但我并不认为这确实是一个问题。
只需指定port = 3307(或.cnf文件之一)。
您还需要注意确保单独配置的缓冲池和其他内存配置不会相互冲突。这实际上是一个好处,尽管您可以根据复制的各个数据库的特定要求更好地调整这些设置。
这样,您只有两个复制流运行到同一台服务器上。永不落后,无需簿记,无需“交换”脚本。
MySQL 5.7将支持扇入(多源复制)。
可在此处找到实验室版本:http : //labs.mysql.com/
可以使用可以用作就地替换MySql的MariaDB。从版本10.2开始支持
Mysql 5.7支持的问题是需要GTID,这意味着必须也必须更改master,如果不是MariaDb,则不是这样。
示例/方法链接:http : //www.skysql.com/blogs/dean-ellis/multi-source-replication-mariadb-100