MySQL主从复制主要有异步、半同步、无损、同步复制模式
一、异步复制Asynchronous
异步复制,有丢数据风险
Master在执行完客户端提交的事务之后将结果立即返回给客户端,并不关心Slave是否接收到、是否处理;这样就会导致一个问题,就是当Master奔溃的时候,此时Master上客户端提交的事务Slave可能还没有接收到,此时如果Slave提升为主,可能导致新的Master上的数据不完整,就发生丢数据的情况。
二、半同步复制Semi-Synchronous
半同步复制在异步复制的基础上的改进,在Master事务的commit之前,必须确保一个Slave收到relay log并且响应给Master以后,才能进行事务的commit。 但是Slave对于relay log的应用仍然是异步进行的,原理如下图所示:
半同步复制在新版MySQL中通过rpl_semi_sync_master_wait_point参数控制ack的时间点
1. 半同步复制Semi-Synchronous
- rpl_semi_sync_master_wait_point=AFTER_COMMOIT: 5.6版本默认; Master commit之后再将日志复制到Slave。
- 在master宕机的情况下,无法保证数据的一致性(Master commit之后,还没来得及将日志复制到Slave就宕机了)