binlog日志就是执行的sql语句,包含插入修改删除,没有查询日志
relaylog日志是指备机接收binlog执行的日志
一:异步复制
master库有两个线程一个用户线程复制处理客户端的请求记录binlog日志,一个dump线程负责拷贝binlog日志跟把日志同步给slave,这样就会造成主从延时不一致问题
二:同步复制
同步复制是在记录binlog后将日志发送给备机,所有备机执行完然后发送确认ack给主机,主机才返回给客户端,如果备机执行时间过长就会导致客户端等待比较久,体验太差
三:半同步
为了解决同步复制的问题,出现了半同步,MySQL半同步复制不要求slave执行,而仅仅是接收到日志后,就通知master可以返回了。
半同步有两种方式AFTER_SYNC模式和AFER_COMMIT模式。两种方式的主要区别在与是否在存储引擎提交后等待slave的ACK.
AFTER_COMMIT模式
master提交时,会首先将该事务的redo log刷入磁盘,然后进入Inodb commit过程,这个步骤主要是释放锁,标记事务为提交状态(其他用户可以看到该事务的更新),这个过程完成后,等待slave发送ack消息,等到slave的响应后,master才成功返回给用户,master和slave的同步逻辑,是master-slave一致性的保证。
AFTER_SYNC模式
与AFTER_COMMIT相比,Master在AFTER_SYNC模式下,fsync binlog后,就开始等待slave同步,那么在进行第5步innodbcommit后,即其他事务能看到该事务的更新时,slave已经成功接收到binlog,即使发生切换,slave拥有与master同样的数据,不会发生“幻读”现象。但是对于上面描述的第一种情况,结果是一样的。