环境:
主、从库的binlog_format = statement
隔离级别: RC
主库会话1 | 主库会话2 | 主库会话3 | 从库会话 |
use test; create table f1(char(2)) engine=InnoDB; | |||
begin; insert into t1 select 1; insert into t1 select 2; insert into t1 select 3; insert into t1 select 4; insert into t1 select 5; | |||
begin; insert into t1 select 'a'; insert into t1 select 'b'; insert into t1 select 'c'; insert into t1 select 'd'; insert into t1 select 'e'; insert into t1 select 'f'; commit; | |||
select * from t1; +------+ | f1 | +------+ | a | | b | | c | | d | | e | | f | +------+ | select * from t1; +------+ | f1 | +------+ | a | | b | | c | | d | | e | | f | +------+ | ||
commit | |||
select * from t1; +------+ | f1 | +------+ | 1 | | 2 | | 3 | | 4 | | 5 | | a | | b | | c | | d | | e | | f | +------+ | select * from t1; +------+ | f1 | +------+ | a | | b | | c | | d | | e | | f | | 1 | | 2 | | 3 | | 4 | | 5 | +------+ |
可以看到上图中,最后一行,主从库的数据排列顺序变化了。如果这时候我们在主库再执行一个类似 update t1 set f1='A' limit 4; 这种操作,则从库的数据彻底乱了。
下面是执行update时候 主库提示的warnings告警。
master [localhost] {root} (test) > master [localhost] {root} (test) > show warnings \G
*************************** 1. row ***************************
Level: Note
Code: 1592
Message: Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
1 row in set (0.00 sec)