前言:
Mysql主从复制是基于binlog实现的
1、从服务器开始主从复制后,会开启两个线程:1、I/O线程 2、SQL线程
2、从服务器的I/O线程会尝试和主服务器建立连接,主服务器中有一个binlog dump线程,专门和从服务器的I/O线程交互
3、从服务器的I/O线程会告诉主服务器的dump线程要从什么位置开始接收binlog
4、主服务器在更新的过程中,会将所有的操作都写入binlog当中
5、当dump线程检测到binlog发生变化时,会从指定位置开始读取内容,然后会被从服务器的I/O线程拉取过去
6、从服务器的I/O线程接收到通知后,会将内容保存到relay log中(中继日志)
7、从服务器的sql线程会不断的从relay log中读取内容,然后将数据写入到自己的数据库中
复制方式:
全同步复制、异步复制、半同步复制
全同步复制:
全同步复制中,当主库执行完一个事务之后,会等待所有的从库完成数据复制之后,才会给客户端反馈
安全可以保障,但是性能差,从库很多的话,需要等待很长时间
异步复制:
Mysql的默认复制方式,当主库执行完事务之后,立刻给客户端返回,不需要关心从库数据是否复制完成
容易丢失此次变更的内容
半异步复制:
半异步复制是全同步复制和异步复制之间的一种复制方式,主库执行完事务之后,不会立马给客户端返回,也不会等所有从库都进行复制完成,而是等其中一个从库完成数据复制之后,再反馈给客户端。
? ? ? ? 半同步复制,会在事务提交的2阶段都完成之后,等待从库复制完binlog,然后在返回成功。