mysql 默认的级别是可重复读
为什么不用读已提交呢?因为以前 binlog 在 RC 隔离级别下主从复制会出错
但是因为在 RR 级别下,存在间隙锁,导致出现死锁的几率比 RC 的大很多
因此 很多大厂采用 RC 级别
那么问题来了,修改为 RC 级别后,binlog 主从复制为什么不会出错呢??
1
puperSB 2020-03-12 23:08:02 +08:00
首先问问题可不可以不可重复读和 RR 同时用。。。其次现在很多大厂的某些业务也是使用的 读提交 隔离级别。但是有两点要注意。第一,读提交会出现幻读(自己的业务要能忍受),第二主从同步要使用 row 模式。
|
2
chen1164162915 2020-03-13 00:37:25 +08:00
隔离级别玩不明白就 Serializable,select for update 一刀切
|
3
CoderGeek 2020-03-13 02:17:54 +08:00
看业务容忍度
|
4
hantsy 2020-03-13 02:23:14 +08:00
每个数据库默认不一样,也不一定所有数据库都支持这 4 种级别。
一般用数据库默认的比较安全。 |
5
littlewing 2020-03-13 08:24:14 +08:00 via iPhone
rc 下主从复制会出错,可以举个例子吗
|
6
leorealman 2020-03-13 09:10:53 +08:00
我也想知道为什么大厂采用 RC 而不用 RR,我的理解中 RC 没有严格满足 ACID 的 I 也就是隔离性...我推测是为了更好的并发?
|
7
cstj0505 2020-03-13 09:19:35 +08:00
如果你觉得同一个事务以内读到的数据不同没关系,可以改已提交读啊。
|
8
bbao 2020-03-13 09:53:43 +08:00
不明白的事情,设计者帮你想明白了,做了默认的选择;
事务隔离级别可以随时调整,满足业务的场景下,如果觉得自己的对且没问题,测试和生产都可以改,有更多不了解就查阅资料就行了。 |
9
wps353 2020-03-13 10:22:58 +08:00 1
因为在 RC 级别下,binlog 的 format 是 row 格式的就能避免问题。
|
10
Aresxue 2020-03-13 10:51:26 +08:00
binlog 的复制方式有两种, 按语句和按行复制, 按语句在幻读发生的情况下就会产生问题,使用严格的行复制就不会有这种问题了
|
11
scnace 2020-03-13 10:53:37 +08:00 via Android
gap lock 指的是 autoinc 的主键吗?
|
12
githubhaoliu 2020-03-13 11:40:20 +08:00
在 RR 下 Mysql 采用 Next Key Locking 机制避免了幻象问题,Oracle 要在 Serializable 才能实现。安全是数据库第一重要的,再说,可以自己调呀。
|