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原生的复制
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix