什么是主从复制
是一种数据备份的方案。
简单来说,是使用两个或两个以上相同的数据库,将一个数据库当做主数据库,而另一个数据库当做从数据库。在主数据库中进行相应操作时,从数据库记录下所有主数据库的操作,使其二者一模一样。
![8a5b9874346a37f62f15391f2037dc2f.png](https://img-blog.csdnimg.cn/img_convert/8a5b9874346a37f62f15391f2037dc2f.png)
为什么需要主从复制
- 读写分离:通过主从复制的方式来同步数据,然后通过读写分离提高数据库并发处理能力,提高数据库的吞吐量。
- 数据备份:我们通过主从复制将主库上的数据复制到了从库上,相当于是一种热备份机制,也就是在主库正常运行的情况下进行的备份,不会影响到服务。
- 高可用性:数据备份实际上是一种冗余的机制,通过这种冗余的方式可以换取数据库的高可用性,也就是当服务器出现故障或宕机的情况下,可以切换到从服务器上,保证服务的正常运行。
mysql的主从复制
实际上主从同步的原理就是基于 Binlog 进行数据同步的。在主从复制过程中,会基于 3 个线程来操作,一个主库线程,两个从库线程。
- 二进制日志转储线程(Binlog dump thread)是一个主库线程。当从库线程连接的时候,主库可以将二进制日志发送给从库,当主库读取事件的时候,会在 Binlog 上加锁,读取完成之后,再将锁释放掉。(当从库线程连接的时候可以将二进制日志发送给从库)
- 从库 I/O 线程会连接到主库,向主库发送请求更新 Binlog。这时从库的 I/O 线程就可以读取到主库的二进制日志转储线程发送的 Binlog 更新部分,并且拷贝到本地形成中继日志(Relay log)。(接到主库,向主库发送请求更新binlog)
- 从库 SQL 线程会读取从库中的中继日志,并且执行日志中的事件,从而将从库中的数据与主库保持同步。(读取从库中的中继日志,并且执行日志中的事件)
总结:从库I/O线程向主库发起更新请求,主库转储线程向从库发送binlog二进制日志,作为中继日志,从库SQL线程从中继日志读取进行同步 (记忆为:请求–响应–执行)