在生产中一组级联从的架构,如果二级主突然挂掉,如何将从配置到一级主库上。
解决方案:
主从同步有两种情况。一种是GTID环境,一种是传统复制。
1、如果是gtid环境,直接在S2上面,stop slave; change master to master_host=M。。。;,start slave;即可。太简单,这里就不演示了。
2、如果是非gtid环境,那么问题就稍微复杂一点了。因为要指定MASTER_LOG_FILE和MASTER_LOG_POS,如何找到主库(M)的这个信息呢。
这里为了模拟生产环境,在M上面用sysbench加了点压力。
具体步骤:
1、当二级主库S1挂掉,在S2上执行show slave status\G ,发现主从同步报错,找到relay-log-file。
2、 解析出最后一个relay-log-file
/usr/local/mysql/bin/mysqlbinlog -v –base64-output=decode-rows relay-bin.000052 > /tmp/1.log
grep TIMESTAMP 1.log –找到最后一个时间戳
vi 1.log / G 到最后,找到对应的sql关键字。 通过时间戳和具体的sql来定位M库的位置。
/TIMESTAMP / N (用N从后往前找)
找到该事务的时间戳 TIMESTAMP=1531817541
3、在M上解析binglog。因为binlog是变化的,有可能生成新的binlog,所以从当前最后一个binlog往前找。
通过关键字@=89166 找到该事务的位置。
再通过TIMESTAMP=1531817541 确认该事务。找到end_log_pos. 因为我用sysbench压的库,所以每个事务都很大,找起来麻烦了点,生产相对能好找一点。
4、再S2上面重新配置到M的主从同步信息。
stop slave;
change master to MASTER_HOST=’M1′ ,MASTER_USER=’xxxx’,MASTER_PASSWORD=’xxxx’,MASTER_PORT=PORT,MASTER_LOG_FILE=’解析的那个binlog’,MASTER_LOG_POS=end_log_pos;
start slave;
5、同步完,记得用pt-table-checksum 校验一下表数据。