一个从站,多个主站MySql


9

是否可以将MySql复制设置为使一个从属侦听两个不同的主控?

Answers:


3

按照设计,一个mysqld进程不能同时收听两个不同的Master。

CHANGE MASTER TO命令仅允许您将一个Master设置为读取源。

为了模拟这一点,您必须以编程方式在两个Master之间进行切换。你是怎样做的 ?

我在StackOverflow中介绍了如何手动将一个从站连接到不同的主站,其中每个主站都是一台笔记本电脑,而从站是中​​央计算机。

这是基本思路

  • M1大师
  • 大师M2
  • 从站S1

设置将M1复制到S1,然后将M2复制到S1

  • 1)让S1以M1作为源运行CHANGE MASTER TO
  • 2)开始从动;
  • 3)运行复制一会儿
  • 4)停止从动;
  • 5)让S1以M2作为源运行CHANGE MASTER TO
  • 6)开始从动;
  • 7)运行复制一会儿
  • 8)停止从动;
  • 9)返回步骤1

每次从一个主设备切换到另一个主设备时,都必须记录以下两个值 SHOW SLAVE STATUS\G

  1. Relay_Master_Log_file
  2. Exec_Master_Log_Pos

这两个值表示来自主服务器的下一个SQL语句,该语句随后将在从服务器上执行。

有一个主要警告:只要M1和M2正在更新互斥数据库,此算法就可以了。

信不信由你,我在2011年5月的ServerFault中解决了这样的问题。我实际上解释了如何基于《高性能MySQL》这本书使用BLACKHOLE存储引擎来模拟真正的多主控/单从属。


尽管我自己还没有真正需要它,但我早些时候就在考虑这个问题。基本上不可能将第二个主服务器的二进制日志通过管道传送到mysql从服务器中吗?我想最好的办法是拥有一个工具,该工具可以像正常的复制从属线程一样监视每个查询的结果并停止错误。但从本质上讲,一个简单的管道也应该这样做。当然,两个主文件写入同一数据库/表都会很快变得棘手。您需要一些大师研究的东西吗?
Jannes

1
我认为值得一提的是,即使MySQL 5.6不这样做,5.7仍将支持多个主服务器。
Phil Sumner

4

罗兰多的解决方案有很多警告。第一个是一个副本流,而另一个工作时不一定要复制。这将为您提供一段时间,使您的奴隶不同步。您现在必须扮演一个微妙的平衡角色,以确保每个人都有足够的时间在“转弯”时追赶。

如前所述,您还必须扮演日志位置的簿记员才能切换回。这确实似乎是错误的,打开窗口以查找丢失或不一致的数据,或者在出现错误时甚至中断复制(这可能是由于日志位置出现“仅由一个错误”引起的)

我建议只运行多个mysql实例。没有什么可以阻止您在同一台计算机上运行两个或多个mysql。它们当然不能同时在同一端口上运行。尽管每个客户端和库都允许您指定3306以外的其他内容,但我并不认为这确实是一个问题。

只需指定port = 3307(或.cnf文件之一)。

您还需要注意确保单独配置的缓冲池和其他内存配置不会相互冲突。这实际上是一个好处,尽管您可以根据复制的各个数据库的特定要求更好地调整这些设置。

这样,您只有两个复制流运行到同一台服务器上。永不落后,无需簿记,无需“交换”脚本。


我很高兴有人了解记账的疯狂。很好的答案。+1 !!!
RolandoMySQLDBA '02


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.