mysql故障转移:如何选择slave作为新的master?

时间:2017-05-14 05:07:12

标签: mysql database-replication failover

我是mysql新手。

当涉及到故障转移时,哪个奴隶应该被提升为新的主人?

例如,A是master,B和C是slave,A执行与B和C的异步复制。

在某些时候,B从A接收的数据多于C,A崩溃。

如果我们将C推广到新的主人,并将B的主人改为C,那么B会发生什么?它会截断其数据以匹配C?

显然,B是最好的新候选人,但我的问题是,如何确定这一事实?

2 个答案:

答案 0 :(得分:2)

MySQL documentation开始,有两种方法可以设置主从架构。传统方式,使用日志文件复制事务和使用GTID(全局事务标识符)的新版本(5.6+)。

如果您选择使用GTID进行故障转移处理,您将使用mysqlfailover实用程序。该实用程序以数据库管理员定义的三种方式之一处理master的失败:

  • auto(默认值):在首选的从站列表中进行搜索以成为主站,如果没有可用,则选择另一个从站。所选择的从站首先成为所有其他从站的从站,并将其他从站的所有更改复制到其中,这样新主站将成为最新版本。
  • 选举:与上述相同,但如果列表中没有可用的从站,则返回错误并完成(无故障转移)
  • 失败:没有发生故障转移mysqlfailover只监控数据库并在发生故障时返回错误。

传统方式要求您实现自己的脚本以进行数据库管理,并且更好地解释here

答案 1 :(得分:0)

Relay_Master_Log_File中的Exec_Master_Log_PosSHOW SLAVE STATUS用于确定最佳奴隶为新主人:更大的价值取胜。

如果没有GTID,我认为我们必须首先将其他奴隶与我们选择的最佳奴隶同步。显而易见的同步源是中继日志。在每个从站上,确定中继日志与最佳从站的差异,下载这些文件并重播SQL语句。一旦所有奴隶赶上来,奴隶就可以CHANGE MASTER TO成为最好的奴隶。 MASTER_LOG_FILEMASTER_LOG_POS将是最佳奴隶上最后一个binlog的尾部。

使用GTID,非常简单:仅CHANGE MASTER TO MASTER_AUTO_POSITION=1