Master关闭时MySQL主从复制

时间:2015-04-02 11:20:15

标签: mysql database ubuntu replication haproxy

我在MySQL上运行MySQL作为Ubuntu实例上的数据库。我正在使用MySQL Master-Slave复制,其中主服务器的更改将写入从服务器,从服务器的更改将不会反映在主服务器上。没关系。我使用HAProxy负载均衡器来处理所有请求将被发送到主MySQL实例的MySQL实例。如果主MySQL实例是关闭的,则MySQL实例将充当主实例,而HAProxy将发送所有请求以进行缓存。主动 - 被动场景。

HAProxy - 192.168.A.ABC
MySQL Master - 192.168.A.ABD
MySQL Slave - 192.168.A.ABE

假设MySQL主服务器(192.168.A.ABD)已关闭。现在,所有请求都将由HAProxy发送到MySQL slave(192.168.A.ABE),现在他将作为主MySQL服务器。

我的问题是

  • 当原始主MySQL实例(192.168.A.ABD)启动时会发生什么?
  • 写入新MySQL主服务器(192.168.A.ABE)的更改是否会再次复制到原始主服务器(192.168.A.ABD)?

我该如何处理这种情况?

2 个答案:

答案 0 :(得分:1)

首先,我应该说我从未使用过HA代理,所以不要直接评论。

但是,在您当前的设置中,Master(ABD)将不同步,并且不会赶上。您将不得不使用mysqlDump或类似工具重建它。

您需要的是Master < > Master设置(与Master > Slave相对),它允许您写入任一数据库并将其反映在另一个数据库中。这听起来并不像听起来那么直接。

假设您已经设置了master > slave,并且它们已同步

在您要添加的主人(ABD)上:

auto_increment_increment=2
auto_increment_offset=1
log-slave-updates

在奴隶(ABE)上添加:

auto_increment_increment=2
auto_increment_offset=2
log-slave-updates

到你的my.cnf文件。重启数据库。这有助于防止Duplicate Key Errors。 (n.b. log-slave-updates并非严格要求,但将来可以更容易地添加另一个奴隶)

接下来你要告诉Master(ABD)从Slave(ABE)复制。

根据MySQL的版本以及您使用的是GTID等,具体过程略有不同。但基本上你要在Master上发出一个CHANGE MASTER语句,以便它从奴隶身上复制。

然后离开你。你可能想要避免同时写两个,因为这会打开另一个水壶。但是如果主机发生故障,你可以将写操作切换到从机,当主机重新启动时,它只会开始复制丢失的数据。

答案 1 :(得分:-1)

我在考虑你的情景

Master - 192.168.A.ABD
Slave - 192.168.A.ABE

您无法直接在系统中添加master。要在系统中添加master,您需要执行以下步骤: 1)当主机启动时,您可以将其添加为从机。所以现在发生这种情况

Master - 192.168.A.ABE
Slave - 192.168.A.ABD

2)然后现在你可以把主人放下。意味着您可以放下192.168.A.ABD 3)然后再次将其添加为奴隶。所以在此之后你将得到低于scenarion

Master - 192.168.A.ABD
Slave - 192.168.A.ABE

您可以参考此链接 https://dev.mysql.com/doc/refman/5.5/en/replication-solutions-switch.html