1、首先讨论一下哪些现象造成:IO thread和SQL thread的双Yes假象的问题
① 正常shutdown 或者 kill mysqld
结果状态单:
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
Last_IO_Errno: 2003
② kill -9 mysqld 或者 reboot 服务器
结果状态:有可能同①,也有可能是双Yes(我自己测试的是同①结果,看别人测的有的是双yes)
③ 临时断开主库的网络,并 kill 掉主库 MySQL 的 binlog dump 线程
结果状态单:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
说明:
网络恢复之后,binlog dump线程已不存在;
主库有新的写入,从库无法同步,但是I/O线程和SQL线程都是YES,SBM也没有延迟
2、主从同步机制
主库上记录二进制日志,也就是binlog日志。
备库将主库的二进制日志复制到其本地的中继日志中。首先,备库会启动一个工作线程,称为I/O线程,I/O线程跟主库建立一个普通的客户端连接,然后在主库上启动一个特殊的二进制转存(Binglog Dump)线程,这个转存线程会读取主库上的二进制日志中事件,并发送给从库的I/O线程;如果主库没有更新信息将进入休眠。
备库的SQL线程执行最后一步,该线程从中继日志中读取事件并在备库执行,从而实现备库数据的更新。
3