1、概念

复制是MySQL数据库提供的一种高可用、高性能的解决方案,指数据可以从一个MySQL数据库主节点复制到一个或多个从节点。

2、用途

  • 读写分离
    读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取操作,不能写入,实现备份的同时,也实现了数据库性能的优化,提升了服务器安全。
  • 热备
    就是复制的实现,主服务器将binlog发送到备份服务器,备份服务器读取binlog,顺序执行binlog中的操作。
  • 扩展
    业务量过大的时候,单机IO过高,需要多机扩展,降低单机IO访问频次。

4、异步复制

简单来说三步实现:

  • 主服务器将更新记录到binlog
  • 从服务将主服务器的binlog拷贝到他的中继日志(relay log)
  • 从服务器将中继日志的数据,顺序更新到自己的数据库上

如图:
DB-replication.png
具体流程:

  1. 主库的更新事件(update,insert,delete)被写入到binlog
  2. 从库连接主库
  3. 主库的binlog dump线程将binlog发送到从库
  4. 从库的IO线程将binlog写入中继日志
  5. 从库的SQL线程执行中继日志中的更新事件,写入从库DB

以上是异步模式,当主库挂了之后,从库很大成都上会丢失数据,导致中从数据出现不一致,并出现数据没法恢复的问题。

5、半同步复制

半同步模式下,主节点需要等待至少一个节点将binlog写入到中继日志,之后就会提交返回,否则等待到超时时间,切换成异步模式再提交。这样提高了数据的安全性,至少有一台从服务器备份了新的数据。
原理如图:
半同步.jpg

6、全同步复制

全同步就是当主节点事务提交之后,所有的从节点必须收到并且回复,之后主节点才能做继续的工作,缺点就是事务时间边长。

7、异步、半同步、全同步对比

异步、半同步、全同步比较.png

参考

MySQL 5.7半同步复制技术
深度探索MySQL主从复制原理
MySQL 主从复制原理
MySQL主从复制原理探索
《MySQL技术内幕:InnoDB存储引擎 第二版》
《MySQL运维内参》
《高可用MySQL-构建健壮的数据中心》

tencent.jpg