mysql主从复制

mysql主从复制的分类

全同步复制

在全同步复制中,主库( master )写数据到二进制日志( binlog )且同步( sync ) ,所有从库请求二进制日志( slave request binlog )后写入中断日志( relay-log )并flushdisk,并且应用完日志且commit 。

理解︰当主提交一个事务,在主库向前端业务请求返回一个commit成功的指令前,必须保证所有的从已经提交了这个事务(所有从库不但接收了,还必须应用该事务日志)

 

优点︰数据不会丢失 缺点:会阻塞master session,性能太差,非常依赖网络 代表︰MySQL-Cluster

 

半同步复制

在半同步复制中,主库( master )写数据到二进制日志文件( binlog )且sync,且提交( commit ) ,然后一直等待确认(ACK )。当至少一个从库请求二进制日志( slave request binlog )后写入到中断日志( relay-log)并flush disk,就返回确认( ACK )(不需要回放应用完日志)

 

优点:会有数据丢失风险(低) 缺点:会阻塞master session,性能差,非常依赖网络,代表: after commit,原生的半同步

 

主库上客户端发出提交commit指令,且提交( commit ),事务写入到了binlog,即lnnoDB commit三段提交的c阶段write commit log完成后,然后等待从库给主库反馈一个确认ack,只有等到从库确认后,master才会把事务提交到存储引擎且返回到client—个commit成功的指令

 

 

无损复制

主库上客户端发出提交commit指令,但未提交(等待提交),即InnoDB commit三段提交的B阶段sync binlog完成后,然后等待从库给主库反馈一个确认ack , 只有等到从库确认后,master才会把事务提交到存储引擎且返回到client一个commit成功的指令。

数据库已提交事务,但是事务还没有执行,将二进制日志同步到从库,从库收到二进制日志,返回给主库, 主库才能执行事务,更新数据。

 

异步复制

在异步复制中,主库( master )写数据到二进制日志( binlog )且同步( sync ) ,从库请求二进制日志( slave request binlog )后写入(中断日志) relay-log并flush disk(持久化到了磁盘的relay.log中)

理解∶主库将事件写入binlog,提交事务,自身并不知道从库是否接收是否处理;

优点∶复制的性能最好 缺点: master挂掉后,slave可能会丢失事务 代表: MySQL原生的复制