MySQL

mysql中binlog的底层原理分析

2019-04-23  本文已影响18人  康俊1024

概述

binlog记录数据更新或者潜在更新(delete from table where id=x)
主从复制就是依靠binlog;master - slave

类型

扩展

互联网项目中mysql应该选什么事务隔离级别

mysql事务隔离级别

读未提交,读已提交,可重复读,串行化(默认是可重复读)

思考

在Oracle,SqlServer中都是选择读已提交(Read Commited)作为默认的隔离级别,为什么Mysql不选择读已提交(Read Commited)作为默认隔离级别,而选择可重复读(Repeatable Read)作为默认的隔离级别呢?

解答

那Mysql在5.0这个版本以前,binlog只支持STATEMENT这种格式!而这种格式在读已提交(Read Commited)这个隔离级别下主从复制是有bug的,因此Mysql将可重复读(Repeatable Read)作为默认的隔离级别
当binlog为STATEMENT格式,且隔离级别为读已提交(Read Commited)时,有什么bug呢?如下图所示,在主(master)上执行如下事务


事务操作.png

出现主从不一致性的问题!原因就是在master上执行的顺序为先删后插!而此时binlog为STATEMENT格式,它记录的顺序为先插后删!从(slave)同步的是binglog,因此从机执行的顺序和主机不一致!就会出现主从不一致!

解决方案
上一篇下一篇

猜你喜欢

热点阅读