历史原因:早期MySQL的binlog日志只有statement格式,在读已提交的隔离界别下,binlog日志存在bug,会导致主从复制不一致的情况。因此默认的隔离级别使用可重复读。
bug:binlog日志中记录的语句顺序和原有顺序会不一致。先删除后插入的操作,同步导从库就变成了先插入后删除的操作了。
MySQL5.1版本之后binlog日志格式还支持了row,mixed ,通常使用读已提交 + row 可以实现更高的并发。对于其中的幻读、不可重复读问题在业务层做保护即可。
binlog的statement模式不适合做主从复制。比如一些函数每次执行结果会不一致。uuid()等。
隔离级别设置和查询方式:
- 当前session设置:
set session transacton isolation level read uncommitted;
set session transacton isolation level read committed;
set session transacton isolation level repeatable read;
set session transacton isolation level serializable;
- 查询当前隔离级别
select @@global.tx_isolation isolation;
- 全局设置
set global transacton isolation level read uncommitted;
set global transacton isolation level read committed;
set global transacton isolation level repeatable read;
set global transacton isolation level serializable;
- 查询全局隔离级别
select @@global.tx_isolation isolation;
标签:set,隔离,level,read,isolation,global,MySQL,级别,transacton
From: https://www.cnblogs.com/wenshichen/p/17376604.html