MySQL-22丨主从复制原理

Posted by jiefang on November 1, 2019

主从复制原理

MySQL异步复制

  • 主库开启binlog的情况下;
  • 如果主库有增删改的语句会记录到binlog中;
  • 主库通过IO线程把binlog里的内容传给从库的中继日志(relay log);
  • 主库给客户端返回commit成功(不会管从库是否已经收到事务的binlog);
  • 从库的SQL线程负责读取它的relay log 里的信息并应用到从库数据库; image

在主库上并行运行的更新SQL,由于从库只有单个SQL线程去消化relay log ,因此更新的SQL只能串行执行,这是主从延迟的原因

MySQL半同步复制

  • 主库开启binlog的情况下;
  • 如果主库有增删改的语句会记录到binlog中;
  • 主库通过IO线程把binlog里的内容传给从库的中继日志(relay log);
  • 从库收到binlog后,发送给主库一个ACK,表示收到了;
  • 主库收到这个ACK之后,才能给客户端返回commit成功
  • 从库的SQL线程负责读取它的relay log 里的信息并应用到从库数据库;

image

跟传统异步复制相比,半同步复制保证了所有给客户端发送过确认提交的事务,从库都已经收到了这个日志