Commit ca25988f authored by Andrei Elkin's avatar Andrei Elkin

Bug #40221 Replication failure on RBR + UPDATE the primary key

Extending bug#40221 regression test: 1. include INSERT 2. convert prim key + autoinc to
unique.
parent 40889f9e
CREATE TABLE t1 (pk int auto_increment primary key) ENGINE=innodb; CREATE TABLE t1 (i int unique) ENGINE=innodb;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`pk`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
reset master; reset master;
begin; begin;
insert into t1 values (1),(2); insert into t1 values (1),(2);
*** the following UPDATE query wont generate any updates for the binlog *** *** the following UPDATE query wont generate any updates for the binlog ***
update t1 set pk = 3 where pk < 3; update t1 set i = 3 where i < 3;
ERROR 23000: Duplicate entry '3' for key 'PRIMARY' ERROR 23000: Duplicate entry '3' for key 'i'
commit; commit;
*** Results of the test: the binlog must have only Write_rows events not any Update_rows *** *** Results of the test: the binlog must have only Write_rows events not any Update_rows ***
show binlog events from <binlog_start>; show binlog events from <binlog_start>;
...@@ -19,4 +13,19 @@ master-bin.000001 # Query # # use `test`; BEGIN ...@@ -19,4 +13,19 @@ master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Xid # # COMMIT /* XID */
delete from t1;
reset master;
begin;
insert into t1 values (1),(2);
*** the following UPDATE query wont generate any updates for the binlog ***
insert into t1 values (3),(4),(1),(2);
ERROR 23000: Duplicate entry '1' for key 'i'
commit;
*** Results of the test: the binlog must have only one Write_rows event not two ***
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
drop table t1; drop table t1;
...@@ -9,18 +9,34 @@ source include/have_binlog_format_row.inc; ...@@ -9,18 +9,34 @@ source include/have_binlog_format_row.inc;
# Bug #40221 Replication failure on RBR + UPDATE the primary key # Bug #40221 Replication failure on RBR + UPDATE the primary key
# #
CREATE TABLE t1 (pk int auto_increment primary key) ENGINE=innodb; CREATE TABLE t1 (i int unique) ENGINE=innodb;
show create table t1;
reset master; reset master;
# part 1: update can cause the dup key
begin; begin;
insert into t1 values (1),(2); insert into t1 values (1),(2);
--echo *** the following UPDATE query wont generate any updates for the binlog *** --echo *** the following UPDATE query wont generate any updates for the binlog ***
--error ER_DUP_ENTRY --error ER_DUP_ENTRY
update t1 set pk = 3 where pk < 3; update t1 set i = 3 where i < 3;
commit; commit;
--echo *** Results of the test: the binlog must have only Write_rows events not any Update_rows *** --echo *** Results of the test: the binlog must have only Write_rows events not any Update_rows ***
source include/show_binlog_events.inc; source include/show_binlog_events.inc;
# part 2: insert can cause the dup key
delete from t1;
reset master;
begin;
insert into t1 values (1),(2);
--echo *** the following UPDATE query wont generate any updates for the binlog ***
--error ER_DUP_ENTRY
insert into t1 values (3),(4),(1),(2);
commit;
--echo *** Results of the test: the binlog must have only one Write_rows event not two ***
source include/show_binlog_events.inc;
drop table t1; drop table t1;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment