mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bug #40004 Replication failure with no PK + no indexes
In certain situations, a scan of the table will return the error code HA_ERR_RECORD_DELETED, and this error code is not correctly caught in the Rows_log_event::find_row() function, which causes an error to be returned for this case. This patch fixes the problem by adding code to either ignore the record and continuing with the next one, the the event of a table scan, or change the error code to HA_ERR_KEY_NOT_FOUND, in the event that a key lookup is attempted.
This commit is contained in:
@ -527,3 +527,60 @@ ERROR 23000: Duplicate entry '10' for key 'PRIMARY'
|
||||
INSERT INTO t1 VALUES (4);
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a int) ENGINE='MYISAM' ;
|
||||
INSERT IGNORE INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 ( a ) VALUES ( 0 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 9 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 2 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 9 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 5 );
|
||||
UPDATE t1 SET a = 5 WHERE a = 9;
|
||||
DELETE FROM t1 WHERE a < 6;
|
||||
UPDATE t1 SET a = 9 WHERE a < 3;
|
||||
INSERT INTO t1 ( a ) VALUES ( 3 );
|
||||
UPDATE t1 SET a = 0 WHERE a < 4;
|
||||
UPDATE t1 SET a = 8 WHERE a < 5;
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a bit) ENGINE='MYISAM' ;
|
||||
INSERT IGNORE INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 ( a ) VALUES ( 0 );
|
||||
UPDATE t1 SET a = 0 WHERE a = 1 LIMIT 3;
|
||||
INSERT INTO t1 ( a ) VALUES ( 5 );
|
||||
DELETE FROM t1 WHERE a < 2 LIMIT 4;
|
||||
DELETE FROM t1 WHERE a < 9 LIMIT 4;
|
||||
INSERT INTO t1 ( a ) VALUES ( 9 );
|
||||
UPDATE t1 SET a = 8 WHERE a = 0 LIMIT 6;
|
||||
INSERT INTO t1 ( a ) VALUES ( 8 );
|
||||
UPDATE t1 SET a = 0 WHERE a < 6 LIMIT 0;
|
||||
INSERT INTO t1 ( a ) VALUES ( 4 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 3 );
|
||||
UPDATE t1 SET a = 0 WHERE a = 7 LIMIT 6;
|
||||
DELETE FROM t1 WHERE a = 4 LIMIT 7;
|
||||
UPDATE t1 SET a = 9 WHERE a < 2 LIMIT 9;
|
||||
UPDATE t1 SET a = 0 WHERE a < 9 LIMIT 2;
|
||||
DELETE FROM t1 WHERE a < 0 LIMIT 5;
|
||||
INSERT INTO t1 ( a ) VALUES ( 5 );
|
||||
UPDATE t1 SET a = 4 WHERE a < 6 LIMIT 4;
|
||||
INSERT INTO t1 ( a ) VALUES ( 5 );
|
||||
UPDATE t1 SET a = 9 WHERE a < 5 LIMIT 8;
|
||||
DELETE FROM t1 WHERE a < 8 LIMIT 8;
|
||||
INSERT INTO t1 ( a ) VALUES ( 6 );
|
||||
DELETE FROM t1 WHERE a < 6 LIMIT 7;
|
||||
UPDATE t1 SET a = 7 WHERE a = 3 LIMIT 7;
|
||||
UPDATE t1 SET a = 8 WHERE a = 0 LIMIT 6;
|
||||
INSERT INTO t1 ( a ) VALUES ( 7 );
|
||||
DELETE FROM t1 WHERE a < 9 LIMIT 4;
|
||||
INSERT INTO t1 ( a ) VALUES ( 7 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 6 );
|
||||
UPDATE t1 SET a = 8 WHERE a = 3 LIMIT 4;
|
||||
DELETE FROM t1 WHERE a = 2 LIMIT 9;
|
||||
DELETE FROM t1 WHERE a = 1 LIMIT 4;
|
||||
UPDATE t1 SET a = 4 WHERE a = 2 LIMIT 7;
|
||||
INSERT INTO t1 ( a ) VALUES ( 0 );
|
||||
DELETE FROM t1 WHERE a < 3 LIMIT 0;
|
||||
UPDATE t1 SET a = 8 WHERE a = 5 LIMIT 2;
|
||||
INSERT INTO t1 ( a ) VALUES ( 1 );
|
||||
UPDATE t1 SET a = 9 WHERE a < 5 LIMIT 3;
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
drop table t1;
|
||||
|
@ -527,3 +527,60 @@ ERROR 23000: Duplicate entry '10' for key 'PRIMARY'
|
||||
INSERT INTO t1 VALUES (4);
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a int) ENGINE='INNODB' ;
|
||||
INSERT IGNORE INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 ( a ) VALUES ( 0 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 9 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 2 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 9 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 5 );
|
||||
UPDATE t1 SET a = 5 WHERE a = 9;
|
||||
DELETE FROM t1 WHERE a < 6;
|
||||
UPDATE t1 SET a = 9 WHERE a < 3;
|
||||
INSERT INTO t1 ( a ) VALUES ( 3 );
|
||||
UPDATE t1 SET a = 0 WHERE a < 4;
|
||||
UPDATE t1 SET a = 8 WHERE a < 5;
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a bit) ENGINE='INNODB' ;
|
||||
INSERT IGNORE INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 ( a ) VALUES ( 0 );
|
||||
UPDATE t1 SET a = 0 WHERE a = 1 LIMIT 3;
|
||||
INSERT INTO t1 ( a ) VALUES ( 5 );
|
||||
DELETE FROM t1 WHERE a < 2 LIMIT 4;
|
||||
DELETE FROM t1 WHERE a < 9 LIMIT 4;
|
||||
INSERT INTO t1 ( a ) VALUES ( 9 );
|
||||
UPDATE t1 SET a = 8 WHERE a = 0 LIMIT 6;
|
||||
INSERT INTO t1 ( a ) VALUES ( 8 );
|
||||
UPDATE t1 SET a = 0 WHERE a < 6 LIMIT 0;
|
||||
INSERT INTO t1 ( a ) VALUES ( 4 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 3 );
|
||||
UPDATE t1 SET a = 0 WHERE a = 7 LIMIT 6;
|
||||
DELETE FROM t1 WHERE a = 4 LIMIT 7;
|
||||
UPDATE t1 SET a = 9 WHERE a < 2 LIMIT 9;
|
||||
UPDATE t1 SET a = 0 WHERE a < 9 LIMIT 2;
|
||||
DELETE FROM t1 WHERE a < 0 LIMIT 5;
|
||||
INSERT INTO t1 ( a ) VALUES ( 5 );
|
||||
UPDATE t1 SET a = 4 WHERE a < 6 LIMIT 4;
|
||||
INSERT INTO t1 ( a ) VALUES ( 5 );
|
||||
UPDATE t1 SET a = 9 WHERE a < 5 LIMIT 8;
|
||||
DELETE FROM t1 WHERE a < 8 LIMIT 8;
|
||||
INSERT INTO t1 ( a ) VALUES ( 6 );
|
||||
DELETE FROM t1 WHERE a < 6 LIMIT 7;
|
||||
UPDATE t1 SET a = 7 WHERE a = 3 LIMIT 7;
|
||||
UPDATE t1 SET a = 8 WHERE a = 0 LIMIT 6;
|
||||
INSERT INTO t1 ( a ) VALUES ( 7 );
|
||||
DELETE FROM t1 WHERE a < 9 LIMIT 4;
|
||||
INSERT INTO t1 ( a ) VALUES ( 7 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 6 );
|
||||
UPDATE t1 SET a = 8 WHERE a = 3 LIMIT 4;
|
||||
DELETE FROM t1 WHERE a = 2 LIMIT 9;
|
||||
DELETE FROM t1 WHERE a = 1 LIMIT 4;
|
||||
UPDATE t1 SET a = 4 WHERE a = 2 LIMIT 7;
|
||||
INSERT INTO t1 ( a ) VALUES ( 0 );
|
||||
DELETE FROM t1 WHERE a < 3 LIMIT 0;
|
||||
UPDATE t1 SET a = 8 WHERE a = 5 LIMIT 2;
|
||||
INSERT INTO t1 ( a ) VALUES ( 1 );
|
||||
UPDATE t1 SET a = 9 WHERE a < 5 LIMIT 3;
|
||||
Comparing tables master:test.t1 and slave:test.t1
|
||||
drop table t1;
|
||||
|
Reference in New Issue
Block a user