mysql主从原理如图所示:
注:图片来源于网络,无侵犯意图,谢谢
总体分为3个阶段:
第一阶段:master将更改事件写进binlog,在提交事务前。
第二阶段:
2.1:从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user 、password、port、ip),并且让从库知道,二进制日志的起点位置(file名和position号)
2.2:当从库start slave后(slave启动I/O线程),从库的I/O线程与主库的Dump线程连接,从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求
2.3:主库dump线程根据从库的请求,将本地binlog以events的方式发给从库I/O线程,
2.4:从库I/O线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到master.info中
第三阶段:从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的relay 会自动被清理purge(SQL线程应用将数据写入数据库)
#这里容易忽略的问题:是主库主动推送binlog到slave,还是slave主动拉取binlog?答案是:主库推送dump,可以用网络抓包的形式证明
#欢迎留言