MySQL Master宕机时的主从复制
MySQL Master-Slave Replication When Master is Down
我 运行 MySQL 作为 Ubuntu 个实例上的数据库。我正在使用 MySQL Master-Slave 复制,其中 master 的更改将写入 slave,而 slave 的更改不会反映在 master 上。没关系。我正在使用 HAProxy 负载平衡器来处理 MySQL 实例,其中所有请求都将发送到主 MySQL 实例。如果 master MySQL 实例宕机,slave MySQL 实例将充当 master,HAProxy 将发送所有请求到 salve。主动-被动场景。
HAProxy - 192.168.A.ABC
MySQL Master - 192.168.A.ABD
MySQL Slave - 192.168.A.ABE
让我们假设 MySQL master(192.168.A.ABD) 已关闭。现在所有的请求都会被HAProxy发送给MySQL slave(192.168.A.ABE),现在他暂时充当主MySQL服务器。
我的问题是
- 原始主 MySQL 实例 (192.168.A.ABD) 启动时会发生什么?
- 写入新 MySQL master (192.168.A.ABE) 的更改会再次复制到原始 master(192.168.A.ABD) 吗?
我该如何应对这种情况?
我正在考虑你的场景
Master - 192.168.A.ABD
Slave - 192.168.A.ABE
不能直接在系统中添加master。要在系统中添加主人,您需要执行以下步骤:
1)当主人启动时,您可以将其添加为奴隶。所以现在发生了这种情况
Master - 192.168.A.ABE
Slave - 192.168.A.ABD
2) 然后现在你可以放下 master 了。意思是你可以把192.168.A.ABD
放下
3)然后再次将其添加为从属。所以在这之后你会得到下面的场景
Master - 192.168.A.ABD
Slave - 192.168.A.ABE
你可以参考这个link
https://dev.mysql.com/doc/refman/5.5/en/replication-solutions-switch.html
首先我应该说我从未使用过 HA Proxy 所以不要直接评论。
但是,在您当前的设置中,Master (ABD) 将不同步,并且不会赶上。您将不得不使用 mysqlDump 或类似工具重建它。
您需要的是 Master < > Master
设置(相对于 Master > Slave
),它使您能够写入任一数据库并将其反映在另一个数据库中。这并不像听起来那么简单。
假设您已经有了 master > slave
设置,并且它们是同步的
在您要添加的Master(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
不是严格要求的,但可以在将来更容易地添加另一个从站)
接下来您要告诉主控 (ABD) 从从属 (ABE) 复制。
根据 MySQL 的版本以及您是否使用 GTID 等,具体过程略有不同。但基本上你要在 Master 上发出 CHANGE MASTER
语句,以便它从 slave 复制。
你走了。您可能希望避免同时给两者写信,因为这会打开另一锅鱼。但是,如果 Master 宕机,您可以将写入切换到 slave,当 Master 恢复时,它会简单地开始复制丢失的数据。
我 运行 MySQL 作为 Ubuntu 个实例上的数据库。我正在使用 MySQL Master-Slave 复制,其中 master 的更改将写入 slave,而 slave 的更改不会反映在 master 上。没关系。我正在使用 HAProxy 负载平衡器来处理 MySQL 实例,其中所有请求都将发送到主 MySQL 实例。如果 master MySQL 实例宕机,slave MySQL 实例将充当 master,HAProxy 将发送所有请求到 salve。主动-被动场景。
HAProxy - 192.168.A.ABC
MySQL Master - 192.168.A.ABD
MySQL Slave - 192.168.A.ABE
让我们假设 MySQL master(192.168.A.ABD) 已关闭。现在所有的请求都会被HAProxy发送给MySQL slave(192.168.A.ABE),现在他暂时充当主MySQL服务器。
我的问题是
- 原始主 MySQL 实例 (192.168.A.ABD) 启动时会发生什么?
- 写入新 MySQL master (192.168.A.ABE) 的更改会再次复制到原始 master(192.168.A.ABD) 吗?
我该如何应对这种情况?
我正在考虑你的场景
Master - 192.168.A.ABD
Slave - 192.168.A.ABE
不能直接在系统中添加master。要在系统中添加主人,您需要执行以下步骤: 1)当主人启动时,您可以将其添加为奴隶。所以现在发生了这种情况
Master - 192.168.A.ABE
Slave - 192.168.A.ABD
2) 然后现在你可以放下 master 了。意思是你可以把192.168.A.ABD
放下
3)然后再次将其添加为从属。所以在这之后你会得到下面的场景
Master - 192.168.A.ABD
Slave - 192.168.A.ABE
你可以参考这个link https://dev.mysql.com/doc/refman/5.5/en/replication-solutions-switch.html
首先我应该说我从未使用过 HA Proxy 所以不要直接评论。
但是,在您当前的设置中,Master (ABD) 将不同步,并且不会赶上。您将不得不使用 mysqlDump 或类似工具重建它。
您需要的是 Master < > Master
设置(相对于 Master > Slave
),它使您能够写入任一数据库并将其反映在另一个数据库中。这并不像听起来那么简单。
假设您已经有了 master > slave
设置,并且它们是同步的
在您要添加的Master(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
不是严格要求的,但可以在将来更容易地添加另一个从站)
接下来您要告诉主控 (ABD) 从从属 (ABE) 复制。
根据 MySQL 的版本以及您是否使用 GTID 等,具体过程略有不同。但基本上你要在 Master 上发出 CHANGE MASTER
语句,以便它从 slave 复制。
你走了。您可能希望避免同时给两者写信,因为这会打开另一锅鱼。但是,如果 Master 宕机,您可以将写入切换到 slave,当 Master 恢复时,它会简单地开始复制丢失的数据。