初识 MySQL 5.5、5.6 半同步复制
MySQL默认的复制都是异步的,在服务器崩溃时丢失事务是使用异步复制不可避免的结果。而5.5之后推出的一项新功能:半同步复制,可以限制事务丢失的数量。 MySQL5.7在5.6/5.5的基础上增强了几点功能: 1)无数据丢失 MySQL5.6/5.5 半同步复制的原理 :提交事务的线程会被锁定,直到至少一个Slave收到这个事务,由于 事务在被提交到存储引擎之后才被发送到Slave上 ,所以事务的丢失数量可以下降到最多每线程一个。因为事务是在被提交之后才发送给Slave的,当Slave没有接收成功,并且Master挂了,会导致主从不一致:主有数据,从没有数据。如下面的情况:( AFTER_COMMIT) 客户端执行一个事务,master接收到之后提交后并把事务发送给slave,在发送的期间网络出现波动,但要等待slave把binlog写到本地的relay-log,然后给master一个返回信息,等待以rpl_semi_sync_master_timeout参数设置的超时为准(默认为10秒)响应。在这等待的10秒里,其他会话查可以看到Master上的事务,此时一旦master发生宕机,由于事务没有发送给slave,而master已经提交了,导致数据不一致。 例子: A客户端执行的事务将字段Z从0修改为1。 1.A提交事务到master 2.master写binlog 3.master