概述:

  • 保证数据的安全性。
  • mysql 中提供了主从复制功能以提高服务的可用性和数据的安全性
  • 主从复制是指服务器分为主服务器和从服务器,主服务器负责读和写,从服务器只负责读,主从复制也叫master/slave, master是主,slave是从,但是并没有强制,也就是说从可以写的。主也可以读,但是我一般不这样做。

架构设计

  1. 一主多从:(保证读的高可用)
    缺点:一但主库奔溃,不能写,但是从库可以读
    有点:一但主库奔溃,不能写
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ylYw8l9E-1602763685564)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201015114025749.png)]
  1. 双主双从(保证写的的高可用)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FguHzyQb-1602763685567)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201015114438793.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IEDQ9yge-1602763685569)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201015114921095.png)]

执行流行:

1.从库不断的试探主库的二进制文件日志,如果这个文件有更新则发送请求到来获取主库中的新内容

2.向主库中写文件:包括添加,删除,修改,建库。。。

3.主将写的命令记录到二进制日志文件并更新二进制日志文件中的偏移量

4.如果从库试探二进制日志文件发现偏移量从记录的偏移量值不同则表示主库有更新,那么启动I/O线 程向主库请求从某个迁移量开始到二进制文件结束所有位置的所有数据

5.主库根据从库请求的迁移量的文字推送数据到从库,然后从库接收数据,会跟新从库搜记录的迁移量 位置。然后将数据中继文件中

6.从库获取了主库的数据库以后,就这些命令数据写入中继日志文件中,然后唤醒SQL线程同时让

当前的I/O挂起(休眠等待)

7、SQL线程根据的中继日志文件的偏移量中继日志文件中的命令

8、SQL线程拿到命令后在本地数据库进行回放(就是在从库中这行主库的SQL语句),回放完成当前SQL挂起,等待下一次唤醒。

注意:主从复制的过程中,有一定的延迟,但是影响很小