而比较麻烦的地方是:由于同一个事务在每台服务器上所在的 binlog 名字和 Postion 位置点都不一样,那么怎么找到 slave2 当前同步停止点,对应 New Master 的 master_log_file 和 Master_log_pos 是什么的时候就成为了难题。这也就是为什么 M-S 复制集群需要使用 MMM,MHA 这样的额外管理工具的一个重要原因。
其实也可以找到,只是比较麻烦,我们都知道主从复制环境中 master 的 binlog 复制到 slave 上后 事务执行时的时间戳是不变的,所有 slave 上同一个事务的时间戳都是相同的。可以根据这个时间戳定位到 Master_log_file 和 Master_log_pos。只是很费时间;麻烦。。。
GTID 出现之后:
在 MySQL 5.6 的 GTID 出现之后,处理这个问题就非常简单了。
由于同一个事务的 GTID 在所有的节点上都是一致的,那么根据 Slave 当前停止点的 GTID 就能唯一定位到 New Master 的 GTID。
更简单的是,由于 MASTER_AUTO_POSITION 功能的出现,我们都不需要知道 GTID 的具体值。直接使用
mysql> CHANGE MASTER TO
MASTER_HOST='XXXX',
MASTER_USER='XXXXX',
MASTER_PASSWORD='XXXXX',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1;
命令就可以直接完成 failover 的工作了。使用 GTID 处理这个问题就简单很多。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx