主从复制原理
MySQL异步复制
- 主库开启binlog的情况下;
- 如果主库有增删改的语句会记录到binlog中;
- 主库通过IO线程把binlog里的内容传给从库的中继日志(relay log);
- 主库给客户端返回commit成功(不会管从库是否已经收到事务的binlog);
- 从库的SQL线程负责读取它的relay log 里的信息并应用到从库数据库;
在主库上并行运行的更新SQL,由于从库只有单个SQL线程去消化relay log ,因此更新的SQL只能串行执行,这是主从延迟的原因。
MySQL半同步复制
- 主库开启binlog的情况下;
- 如果主库有增删改的语句会记录到binlog中;
- 主库通过IO线程把binlog里的内容传给从库的中继日志(relay log);
- 从库收到binlog后,发送给主库一个ACK,表示收到了;
- 主库收到这个ACK之后,才能给客户端返回commit成功;
- 从库的SQL线程负责读取它的relay log 里的信息并应用到从库数据库;
跟传统异步复制相比,半同步复制保证了所有给客户端发送过确认提交的事务,从库都已经收到了这个日志。