首页 新闻 会员 周边

当 MySQL 5.6 并行复制遇上了 join 操作

0
悬赏园豆:10 [待解决问题]

MySQL 5.6 的并行复制是db级别的,如果碰到一个SQL,包含一个跨库 join 的写操作时,

譬如说:

update db1.tb1 as a , db2.tb2 as b set a.id = 100 where a.id = b.id ;

slave会怎么样?并行复制会失效吗?

个人开脑洞猜测,不知道靠不靠谱:

1. 当binlog是statement格式时,并行复制暂时失效,该SQL执行完毕后并行复制恢复

2. 当binlog是row格式时,并行复制不失效

木子那个李的主页 木子那个李 | 初学一级 | 园豆:192
提问于:2015-01-16 13:58
< >
分享
所有回答(3)
0

一个跨库 join 的写操作时,请问这是一种 什么场景???

Set sail | 园豆:540 (小虾三级) | 2015-01-16 16:28

比方说:update db1.tb1 as a , db2.tb2 as b set a.id = 100 where a.id = b.id

支持(0) 反对(0) 木子那个李 | 园豆:192 (初学一级) | 2015-01-16 17:32

@木子那个李: 哦,update时不是锁行的吗,应该跟你那复制没关系

支持(0) 反对(0) Set sail | 园豆:540 (小虾三级) | 2015-01-16 17:44
0

不太明白,但是想问下楼主,当宝db1和db2分别是主从上的两个库是吧,而你的写只是针对db1,而db1和db2不可能是主从库关系吧 他们名字就不一样

葱油饼 | 园豆:186 (初学一级) | 2015-01-22 15:20
0

不会失效的。你看我给你模拟的实验

CREATE TABLE t1.t1(
id1 INT(10) ,
name CHAR(20))ENGINE = INNODB DEFAULT CHARSET=UTF8;

CREATE TABLE t2.t2(
id2 INT(10) ,
name CHAR(20))ENGINE = INNODB DEFAULT CHARSET=UTF8;

INSERT INTO t1.t1 VALUES (1,'u11');
INSERT INTO t1.t1 VALUES (2,'u12');
INSERT INTO t1.t1 VALUES (3,'u13');
INSERT INTO t1.t1 VALUES (4,'u14');
INSERT INTO t1.t1 VALUES (5,'u15');

INSERT INTO t2.t2 VALUES (1,'u11');
INSERT INTO t2.t2 VALUES (2,'u12');
INSERT INTO t2.t2 VALUES (3,'u13');


#从库再次查看同步状态:
SHOW SLAVE STATUS \G

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

主库上更新:
mysql> UPDATE t1.t1 AS a,t2.t2 AS b 
    -> SET a.id1 = 100
    -> WHERE a.id1=b.id2;
Query OK, 3 rows affected (0.13 sec)
Rows matched: 3  Changed: 3  Warnings: 0


mysql> show variables like '%format%';
+--------------------------+-------------------+
| Variable_name            | Value             |
+--------------------------+-------------------+
| binlog_format            | STATEMENT         |
…………

#从库再次查看同步状态:
SHOW SLAVE STATUS \G

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
艾森豪威迩 | 园豆:210 (菜鸟二级) | 2015-06-24 17:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册