1.异步复制
代码语言:javascript
复制搭建简单,使用非常广泛,从mysql诞生之初就产生了这种架构性能非常好,可谓非成熟,但是这种架构数据是异步的,所以有丢失数据库的风险。
2.全同步复制
代码语言:javascript
复制保证数据安全,不丢失数据,损失性能。
3.传统半同步复制
代码语言:javascript
复制性能,功能都介于异步和全同步之间,从5.5开始诞生,目的是为了折中上述两种架构的性能以及优缺点。
4.无损复制(增强版的半同步复制)
代码语言:javascript
复制数据零丢失,性能好,mysql5.7诞生。
异步复制原理:
代码语言:javascript
复制在异步复制中,主库写数据导二进制日志且同步从库请求二进制日志后写入中断日志并fluh disk
理解:主库将事件写入binlog,提交事务,自身并不知道从库是否接收处理;
优点:复制性能最好
缺点:master挂掉后,slave可能会丢失事务
代表:mysql原生的复制。
全同步复制原理:
代码语言:javascript
复制在全同步复制中,主库写数据到二进制日志且同步,所有从库请求二进制日志后写入中断日志并flush disk,并且应用完日志且commit。
理解:当主提交一个事务,在主库向前端业务请求返回一个commit成功的指令前,必须保证所有从已经提交了这个事务(所有从库不但接收了,还必须应用该事务日志)
优点:数据刽丢失
缺点:会阻塞master session,性能太差,非常依赖网络。
代表:master-cluster
传统的半复制原理:
代码语言:javascript
复制在半同步复制中,主库写数据导二进制日志文件且sync且提交,然后一直等待确认
当至少一个从库请求二进制日志后写入到中断日志并flush disk,就返回确认
优点:会有数据丢失风险(低)
缺点:会阻塞master session,性能差,非常依赖网络。
代表:after commit,原生的半同步。
无损复制(增强版半复制)原理:
代码语言:javascript
复制在半同步复制中,主库写数据到二进制日志且sync,然后一直等待回复确认,当至少一个从库请求二进制日志后写入到中继日志并flush disk,就返回确认。
优点:数据零丢失,性能好。
缺点:会阻塞master session,非常依赖网络。
代表:after sync,原生的半同步。