2017-05-14 35 views
5

我是mysql新手。MySQL故障转移:如何选择奴隶作为新的主人?

说到故障切换时,应该将哪个从站升级为新的主站?

例如,A是主,B和C是从站,和A确实异步复制到B和C.

在的某个时间点,B从A比C,A崩溃接收更多的数据。

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

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

+0

http://stackoverflow.com/questions/14116488/master-slave-configuration归因于 –

+0

问题......这是一个小问题,因为在理解答案之前你需要理解这个问题:你在复制基于二进制日志坐标或全局事务标识符(GTID)? –

+0

@ Michael-sqlbot你能解释一下吗? – kingluo

回答

1

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

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

  • 自动(默认值):搜索是在首选奴隶的列表中进行成为高手,如果没有可用的另一个从选择。被选中的奴隶首先成为所有其他奴隶的奴隶,并将其他奴隶的所有变化复制到奴隶,这样新的主人将成为最新版本的可能。
  • 选:与以上相同,不同之处在于,如果没有从列表中的奴隶都可以返回一个错误,并且完成(无故障转移)
  • 失败:没有故障发生mysqlfailover只会监控数据库,并返回,如果一个错误失败发生。

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

+0

我知道有些工具(官方或非官方)可以进行自动故障切换,但我需要现场背后的理论。也就是说,我需要“为什么”而不是“如何”。 – kingluo

+0

你给出的官方参考文件没有解释确定最新奴隶的方法。 – kingluo

0

Relay_Master_Log_FileExec_Master_Log_Pos in SHOW SLAVE STATUS用于确定最佳奴隶作为新的主人:更大的胜利。

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

随着GTID,它非常简单:只需CHANGE MASTER TOMASTER_AUTO_POSITION=1