sql_IO线程的工作流程:
首先IO线程进行初始化>从库跟主库进行通信>获取主库的版本以及serverid,uuid等信息,如果从库的版本比主库高会进行报错, >主库会将从库的信息记录到列表当中主库接下来就要给从库发送日志了>需要从库提供基本信息,说明从库现在的日志以及基本信息,主库获取到时候,开始发送全新的二进制 日志信息 包括主库的serverid,uuid等,数据包发送成功之后需要返回ACK,主库不会管发送的数据包是否在从库进行落盘,日志会写入到relay_log当中 ,relay_log会通过一个函数激活sql线程
SQL线程会先看上次回放日志的位置点比如是1,发现新到的日志是2,会进行回放。
打开GTID 主库就会告诉从库 GTID100已经有了不用回放了。
2pc理念介绍:
在单机mysql当中只要redo落盘了就可以理解为commit成功了
在主从当中 主库进行coomit之后进行上锁,从库拿到数据落盘成功之后返回给主库我落盘成功了,主库进行解锁,开启下一个事务。
主库做了一个事务,redo落地就可以了
binlogfile
2pc机制详解图
