960 lines
37 KiB
Plaintext
960 lines
37 KiB
Plaintext
include/master-slave.inc
|
|
Warnings:
|
|
Note #### Sending passwords in plain text without SSL/TLS is extremely insecure.
|
|
Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
|
|
[connection master]
|
|
*** Test 1 ********************************************************
|
|
* test native NDB$OLD() conflict resolution
|
|
* test with both allowed "conflict column" types, uint32 and uint64
|
|
*******************************************************************
|
|
set @save_luaw = @@global.ndb_log_update_as_write;
|
|
set @save_luo = @@global.ndb_log_updated_only;
|
|
set global ndb_log_update_as_write=0;
|
|
set global ndb_log_updated_only=0;
|
|
insert into mysql.ndb_replication values ("test", "t1", 0, NULL, "NDB$OLD(X)");
|
|
create table t1 (a int, b varchar(32), X int unsigned, d varchar(9), primary key (a, d)) engine ndb;
|
|
create table t2 (a int key, b varchar(32), c int unsigned, d varchar(9)) engine ndb;
|
|
************************************************
|
|
* some basic positive testing, i.e. no conflicts
|
|
************************************************
|
|
*** insert some data
|
|
begin;
|
|
insert into t1 values (1, "Master t1 a=1 at X=1", 1, '1');
|
|
insert into t1 values (2, "Master t1 a=2 at X=1", 1, '12');
|
|
insert into t1 values (3, "Master t1 a=3 at X=1", 1, '123');
|
|
insert into t2 values (1, "Master t2 a=1 at c=1", 1, '1');
|
|
insert into t2 values (2, "Master t2 a=2 at c=1", 1, '12');
|
|
insert into t2 values (3, "Master t2 a=3 at c=1", 1, '123');
|
|
commit;
|
|
*** master - update all
|
|
begin;
|
|
update t1 set b="Master t1 X=2", X=X+1;
|
|
update t2 set b="Master t2 c=2", c=c+1;
|
|
commit;
|
|
*** slave - check update all
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 X=2 2 1
|
|
2 Master t1 X=2 2 12
|
|
3 Master t1 X=2 2 123
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 c=2 2 1
|
|
2 Master t2 c=2 2 12
|
|
3 Master t2 c=2 2 123
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** master - update 2 rows in different tables
|
|
update t1 set b="Master t1 a=2 at X=3", X=X+1 where a=2;
|
|
update t2 set b="Master t2 a=3 at c=3", c=c+1 where a=3;
|
|
*** slave - check update 2 rows in different tables
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 X=2 2 1
|
|
2 Master t1 a=2 at X=3 3 12
|
|
3 Master t1 X=2 2 123
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 c=2 2 1
|
|
2 Master t2 c=2 2 12
|
|
3 Master t2 a=3 at c=3 3 123
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** master - delete all
|
|
delete from t1;
|
|
delete from t2;
|
|
*** slave - check delete all
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
************************
|
|
* start conflict testing
|
|
************************
|
|
*** master - insert some data
|
|
begin;
|
|
insert into t1 values (1, "Master t1 a=1 at X=10", 10, '111');
|
|
insert into t1 values (2, "Master t1 a=2 at X=10", 10, '111222');
|
|
insert into t1 values (3, "Master t1 a=3 at X=10", 10, '111222333');
|
|
insert into t1 values (4, "Master t1 a=4 at X=10", 10, '111222333');
|
|
insert into t2 values (1, "Master t2 a=1 at c=10", 10, '111');
|
|
insert into t2 values (2, "Master t2 a=2 at c=10", 10, '111222');
|
|
insert into t2 values (3, "Master t2 a=3 at c=10", 10, '111222333');
|
|
insert into t2 values (4, "Master t2 a=4 at c=10", 10, '111222333');
|
|
commit;
|
|
*** slave - check conflict info, no conflicts yet
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** slave - check insert some data
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 a=1 at X=10 10 111
|
|
2 Master t1 a=2 at X=10 10 111222
|
|
3 Master t1 a=3 at X=10 10 111222333
|
|
4 Master t1 a=4 at X=10 10 111222333
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 a=1 at c=10 10 111
|
|
2 Master t2 a=2 at c=10 10 111222
|
|
3 Master t2 a=3 at c=10 10 111222333
|
|
4 Master t2 a=4 at c=10 10 111222333
|
|
*** slave - update some data to cause conflicts
|
|
begin;
|
|
update t1 set b="Slave t1 a=1 at X=12", X=12 where a=1 and d='111';
|
|
update t1 set b="Slave t1 a=2 at X=12", X=12 where a=2 and d='111222';
|
|
update t1 set b="Slave t1 a=3 at X=12", X=12 where a=3 and d='111222333';
|
|
update t1 set b="Slave t1 a=4 at X=12", X=12 where a=4 and d='111222333';
|
|
update t2 set b="Slave t2 a=1 at c=12", c=12 where a=1;
|
|
update t2 set b="Slave t2 a=2 at c=12", c=12 where a=2;
|
|
update t2 set b="Slave t2 a=3 at c=12", c=12 where a=3;
|
|
update t2 set b="Slave t2 a=4 at c=12", c=12 where a=4;
|
|
commit;
|
|
*** master - update some data to cause conflicts
|
|
begin;
|
|
update t1 set b="Master t1 a=1 at X=11", X=11 where a=1 and d='111';
|
|
update t1 set b="Master t1 a=2 at X=11", X=11 where a=2 and d='111222';
|
|
update t1 set b="Master t1 a=3 at X=11", X=11 where a=3 and d='111222333';
|
|
delete from t1 where a = 4;
|
|
update t2 set b="Master t2 a=1 at c=11", c=11 where a=1;
|
|
update t2 set b="Master t2 a=2 at c=11", c=11 where a=2;
|
|
update t2 set b="Master t2 a=3 at c=11", c=11 where a=3;
|
|
delete from t2 where a = 4;
|
|
commit;
|
|
*** slave - check conflict info, there should be some
|
|
Conflict algorithm counter diff :
|
|
ndb_conflict_fn_old
|
|
4
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # 1 # #
|
|
2 1 # 2 # #
|
|
2 1 # 3 # #
|
|
2 1 # 4 # #
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # # 1 111
|
|
2 1 # # 2 111222
|
|
2 1 # # 3 111222333
|
|
2 1 # # 4 111222333
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** slave - check update some data that causes conflicts
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Slave t1 a=1 at X=12 12 111
|
|
2 Slave t1 a=2 at X=12 12 111222
|
|
3 Slave t1 a=3 at X=12 12 111222333
|
|
4 Slave t1 a=4 at X=12 12 111222333
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 a=1 at c=11 11 111
|
|
2 Master t2 a=2 at c=11 11 111222
|
|
3 Master t2 a=3 at c=11 11 111222333
|
|
*** slave - correct some data to correspond to the master
|
|
update t1 set b="Slave t1 a=1 at X=11", X=11 where a=1 and d='111';
|
|
delete from t1 where a = 4;
|
|
*** master - update some data, use higher timestamp
|
|
begin;
|
|
update t1 set b="Master t1 a=1 at X=13", X=13 where a=1 and d='111';
|
|
update t1 set b="Master t1 a=2 at X=13", X=13 where a=2 and d='111222';
|
|
update t1 set b="Master t1 a=3 at X=13", X=13 where a=3 and d='111222333';
|
|
update t2 set b="Master t2 a=1 at c=13", c=13 where a=1;
|
|
update t2 set b="Master t2 a=2 at c=13", c=13 where a=2;
|
|
update t2 set b="Master t2 a=3 at c=13", c=13 where a=3;
|
|
commit;
|
|
*** slave - check conflict info, change depends on calling test
|
|
Conflict algorithm counter diff :
|
|
ndb_conflict_fn_old
|
|
6
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # 1 # #
|
|
2 1 # 2 # #
|
|
2 1 # 3 # #
|
|
2 1 # 4 # #
|
|
2 1 # 5 # #
|
|
2 1 # 6 # #
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # # 1 111
|
|
2 1 # # 2 111222
|
|
2 1 # # 2 111222
|
|
2 1 # # 3 111222333
|
|
2 1 # # 3 111222333
|
|
2 1 # # 4 111222333
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** slave - check higer timestamp
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 a=1 at X=13 13 111
|
|
2 Slave t1 a=2 at X=12 12 111222
|
|
3 Slave t1 a=3 at X=12 12 111222333
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 a=1 at c=13 13 111
|
|
2 Master t2 a=2 at c=13 13 111222
|
|
3 Master t2 a=3 at c=13 13 111222333
|
|
drop table t1, t2;
|
|
*** Test 2 ********************************************************
|
|
* test native NDB$OLD() conflict resolution
|
|
* test with both allowed "conflict column" types, uint32 and uint64
|
|
*******************************************************************
|
|
create table t1 (a int, b varchar(32), X bigint unsigned, d varchar(9), primary key (a, d)) engine ndb;
|
|
create table t2 (a int key, b varchar(32), c int unsigned, d varchar(9)) engine ndb;
|
|
************************************************
|
|
* some basic positive testing, i.e. no conflicts
|
|
************************************************
|
|
*** insert some data
|
|
begin;
|
|
insert into t1 values (1, "Master t1 a=1 at X=1", 1, '1');
|
|
insert into t1 values (2, "Master t1 a=2 at X=1", 1, '12');
|
|
insert into t1 values (3, "Master t1 a=3 at X=1", 1, '123');
|
|
insert into t2 values (1, "Master t2 a=1 at c=1", 1, '1');
|
|
insert into t2 values (2, "Master t2 a=2 at c=1", 1, '12');
|
|
insert into t2 values (3, "Master t2 a=3 at c=1", 1, '123');
|
|
commit;
|
|
*** master - update all
|
|
begin;
|
|
update t1 set b="Master t1 X=2", X=X+1;
|
|
update t2 set b="Master t2 c=2", c=c+1;
|
|
commit;
|
|
*** slave - check update all
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 X=2 2 1
|
|
2 Master t1 X=2 2 12
|
|
3 Master t1 X=2 2 123
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 c=2 2 1
|
|
2 Master t2 c=2 2 12
|
|
3 Master t2 c=2 2 123
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** master - update 2 rows in different tables
|
|
update t1 set b="Master t1 a=2 at X=3", X=X+1 where a=2;
|
|
update t2 set b="Master t2 a=3 at c=3", c=c+1 where a=3;
|
|
*** slave - check update 2 rows in different tables
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 X=2 2 1
|
|
2 Master t1 a=2 at X=3 3 12
|
|
3 Master t1 X=2 2 123
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 c=2 2 1
|
|
2 Master t2 c=2 2 12
|
|
3 Master t2 a=3 at c=3 3 123
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** master - delete all
|
|
delete from t1;
|
|
delete from t2;
|
|
*** slave - check delete all
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
************************
|
|
* start conflict testing
|
|
************************
|
|
*** master - insert some data
|
|
begin;
|
|
insert into t1 values (1, "Master t1 a=1 at X=10", 10, '111');
|
|
insert into t1 values (2, "Master t1 a=2 at X=10", 10, '111222');
|
|
insert into t1 values (3, "Master t1 a=3 at X=10", 10, '111222333');
|
|
insert into t1 values (4, "Master t1 a=4 at X=10", 10, '111222333');
|
|
insert into t2 values (1, "Master t2 a=1 at c=10", 10, '111');
|
|
insert into t2 values (2, "Master t2 a=2 at c=10", 10, '111222');
|
|
insert into t2 values (3, "Master t2 a=3 at c=10", 10, '111222333');
|
|
insert into t2 values (4, "Master t2 a=4 at c=10", 10, '111222333');
|
|
commit;
|
|
*** slave - check conflict info, no conflicts yet
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** slave - check insert some data
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 a=1 at X=10 10 111
|
|
2 Master t1 a=2 at X=10 10 111222
|
|
3 Master t1 a=3 at X=10 10 111222333
|
|
4 Master t1 a=4 at X=10 10 111222333
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 a=1 at c=10 10 111
|
|
2 Master t2 a=2 at c=10 10 111222
|
|
3 Master t2 a=3 at c=10 10 111222333
|
|
4 Master t2 a=4 at c=10 10 111222333
|
|
*** slave - update some data to cause conflicts
|
|
begin;
|
|
update t1 set b="Slave t1 a=1 at X=12", X=12 where a=1 and d='111';
|
|
update t1 set b="Slave t1 a=2 at X=12", X=12 where a=2 and d='111222';
|
|
update t1 set b="Slave t1 a=3 at X=12", X=12 where a=3 and d='111222333';
|
|
update t1 set b="Slave t1 a=4 at X=12", X=12 where a=4 and d='111222333';
|
|
update t2 set b="Slave t2 a=1 at c=12", c=12 where a=1;
|
|
update t2 set b="Slave t2 a=2 at c=12", c=12 where a=2;
|
|
update t2 set b="Slave t2 a=3 at c=12", c=12 where a=3;
|
|
update t2 set b="Slave t2 a=4 at c=12", c=12 where a=4;
|
|
commit;
|
|
*** master - update some data to cause conflicts
|
|
begin;
|
|
update t1 set b="Master t1 a=1 at X=11", X=11 where a=1 and d='111';
|
|
update t1 set b="Master t1 a=2 at X=11", X=11 where a=2 and d='111222';
|
|
update t1 set b="Master t1 a=3 at X=11", X=11 where a=3 and d='111222333';
|
|
delete from t1 where a = 4;
|
|
update t2 set b="Master t2 a=1 at c=11", c=11 where a=1;
|
|
update t2 set b="Master t2 a=2 at c=11", c=11 where a=2;
|
|
update t2 set b="Master t2 a=3 at c=11", c=11 where a=3;
|
|
delete from t2 where a = 4;
|
|
commit;
|
|
*** slave - check conflict info, there should be some
|
|
Conflict algorithm counter diff :
|
|
ndb_conflict_fn_old
|
|
4
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # 1 # #
|
|
2 1 # 2 # #
|
|
2 1 # 3 # #
|
|
2 1 # 4 # #
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # # 1 111
|
|
2 1 # # 2 111222
|
|
2 1 # # 3 111222333
|
|
2 1 # # 4 111222333
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** slave - check update some data that causes conflicts
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Slave t1 a=1 at X=12 12 111
|
|
2 Slave t1 a=2 at X=12 12 111222
|
|
3 Slave t1 a=3 at X=12 12 111222333
|
|
4 Slave t1 a=4 at X=12 12 111222333
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 a=1 at c=11 11 111
|
|
2 Master t2 a=2 at c=11 11 111222
|
|
3 Master t2 a=3 at c=11 11 111222333
|
|
*** slave - correct some data to correspond to the master
|
|
update t1 set b="Slave t1 a=1 at X=11", X=11 where a=1 and d='111';
|
|
delete from t1 where a = 4;
|
|
*** master - update some data, use higher timestamp
|
|
begin;
|
|
update t1 set b="Master t1 a=1 at X=13", X=13 where a=1 and d='111';
|
|
update t1 set b="Master t1 a=2 at X=13", X=13 where a=2 and d='111222';
|
|
update t1 set b="Master t1 a=3 at X=13", X=13 where a=3 and d='111222333';
|
|
update t2 set b="Master t2 a=1 at c=13", c=13 where a=1;
|
|
update t2 set b="Master t2 a=2 at c=13", c=13 where a=2;
|
|
update t2 set b="Master t2 a=3 at c=13", c=13 where a=3;
|
|
commit;
|
|
*** slave - check conflict info, change depends on calling test
|
|
Conflict algorithm counter diff :
|
|
ndb_conflict_fn_old
|
|
6
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # 1 # #
|
|
2 1 # 2 # #
|
|
2 1 # 3 # #
|
|
2 1 # 4 # #
|
|
2 1 # 5 # #
|
|
2 1 # 6 # #
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # # 1 111
|
|
2 1 # # 2 111222
|
|
2 1 # # 2 111222
|
|
2 1 # # 3 111222333
|
|
2 1 # # 3 111222333
|
|
2 1 # # 4 111222333
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** slave - check higer timestamp
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 a=1 at X=13 13 111
|
|
2 Slave t1 a=2 at X=12 12 111222
|
|
3 Slave t1 a=3 at X=12 12 111222333
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 a=1 at c=13 13 111
|
|
2 Master t2 a=2 at c=13 13 111222
|
|
3 Master t2 a=3 at c=13 13 111222333
|
|
drop table t1, t2;
|
|
*** Test 3 ********************************************************
|
|
* test native NDB$OLD() conflict resolution
|
|
* test that setting binlog update option via table works equally well
|
|
*******************************************************************
|
|
set global ndb_log_update_as_write=1;
|
|
set global ndb_log_updated_only=1;
|
|
update mysql.ndb_replication set binlog_type=7;
|
|
create table t1 (a int, b varchar(32), X bigint unsigned, d varchar(9), primary key (a, d)) engine ndb;
|
|
create table t2 (a int key, b varchar(32), c int unsigned, d varchar(9)) engine ndb;
|
|
************************************************
|
|
* some basic positive testing, i.e. no conflicts
|
|
************************************************
|
|
*** insert some data
|
|
begin;
|
|
insert into t1 values (1, "Master t1 a=1 at X=1", 1, '1');
|
|
insert into t1 values (2, "Master t1 a=2 at X=1", 1, '12');
|
|
insert into t1 values (3, "Master t1 a=3 at X=1", 1, '123');
|
|
insert into t2 values (1, "Master t2 a=1 at c=1", 1, '1');
|
|
insert into t2 values (2, "Master t2 a=2 at c=1", 1, '12');
|
|
insert into t2 values (3, "Master t2 a=3 at c=1", 1, '123');
|
|
commit;
|
|
*** master - update all
|
|
begin;
|
|
update t1 set b="Master t1 X=2", X=X+1;
|
|
update t2 set b="Master t2 c=2", c=c+1;
|
|
commit;
|
|
*** slave - check update all
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 X=2 2 1
|
|
2 Master t1 X=2 2 12
|
|
3 Master t1 X=2 2 123
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 c=2 2 1
|
|
2 Master t2 c=2 2 12
|
|
3 Master t2 c=2 2 123
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** master - update 2 rows in different tables
|
|
update t1 set b="Master t1 a=2 at X=3", X=X+1 where a=2;
|
|
update t2 set b="Master t2 a=3 at c=3", c=c+1 where a=3;
|
|
*** slave - check update 2 rows in different tables
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 X=2 2 1
|
|
2 Master t1 a=2 at X=3 3 12
|
|
3 Master t1 X=2 2 123
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 c=2 2 1
|
|
2 Master t2 c=2 2 12
|
|
3 Master t2 a=3 at c=3 3 123
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** master - delete all
|
|
delete from t1;
|
|
delete from t2;
|
|
*** slave - check delete all
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
************************
|
|
* start conflict testing
|
|
************************
|
|
*** master - insert some data
|
|
begin;
|
|
insert into t1 values (1, "Master t1 a=1 at X=10", 10, '111');
|
|
insert into t1 values (2, "Master t1 a=2 at X=10", 10, '111222');
|
|
insert into t1 values (3, "Master t1 a=3 at X=10", 10, '111222333');
|
|
insert into t1 values (4, "Master t1 a=4 at X=10", 10, '111222333');
|
|
insert into t2 values (1, "Master t2 a=1 at c=10", 10, '111');
|
|
insert into t2 values (2, "Master t2 a=2 at c=10", 10, '111222');
|
|
insert into t2 values (3, "Master t2 a=3 at c=10", 10, '111222333');
|
|
insert into t2 values (4, "Master t2 a=4 at c=10", 10, '111222333');
|
|
commit;
|
|
*** slave - check conflict info, no conflicts yet
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** slave - check insert some data
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 a=1 at X=10 10 111
|
|
2 Master t1 a=2 at X=10 10 111222
|
|
3 Master t1 a=3 at X=10 10 111222333
|
|
4 Master t1 a=4 at X=10 10 111222333
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 a=1 at c=10 10 111
|
|
2 Master t2 a=2 at c=10 10 111222
|
|
3 Master t2 a=3 at c=10 10 111222333
|
|
4 Master t2 a=4 at c=10 10 111222333
|
|
*** slave - update some data to cause conflicts
|
|
begin;
|
|
update t1 set b="Slave t1 a=1 at X=12", X=12 where a=1 and d='111';
|
|
update t1 set b="Slave t1 a=2 at X=12", X=12 where a=2 and d='111222';
|
|
update t1 set b="Slave t1 a=3 at X=12", X=12 where a=3 and d='111222333';
|
|
update t1 set b="Slave t1 a=4 at X=12", X=12 where a=4 and d='111222333';
|
|
update t2 set b="Slave t2 a=1 at c=12", c=12 where a=1;
|
|
update t2 set b="Slave t2 a=2 at c=12", c=12 where a=2;
|
|
update t2 set b="Slave t2 a=3 at c=12", c=12 where a=3;
|
|
update t2 set b="Slave t2 a=4 at c=12", c=12 where a=4;
|
|
commit;
|
|
*** master - update some data to cause conflicts
|
|
begin;
|
|
update t1 set b="Master t1 a=1 at X=11", X=11 where a=1 and d='111';
|
|
update t1 set b="Master t1 a=2 at X=11", X=11 where a=2 and d='111222';
|
|
update t1 set b="Master t1 a=3 at X=11", X=11 where a=3 and d='111222333';
|
|
delete from t1 where a = 4;
|
|
update t2 set b="Master t2 a=1 at c=11", c=11 where a=1;
|
|
update t2 set b="Master t2 a=2 at c=11", c=11 where a=2;
|
|
update t2 set b="Master t2 a=3 at c=11", c=11 where a=3;
|
|
delete from t2 where a = 4;
|
|
commit;
|
|
*** slave - check conflict info, there should be some
|
|
Conflict algorithm counter diff :
|
|
ndb_conflict_fn_old
|
|
4
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # 1 # #
|
|
2 1 # 2 # #
|
|
2 1 # 3 # #
|
|
2 1 # 4 # #
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # # 1 111
|
|
2 1 # # 2 111222
|
|
2 1 # # 3 111222333
|
|
2 1 # # 4 111222333
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** slave - check update some data that causes conflicts
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Slave t1 a=1 at X=12 12 111
|
|
2 Slave t1 a=2 at X=12 12 111222
|
|
3 Slave t1 a=3 at X=12 12 111222333
|
|
4 Slave t1 a=4 at X=12 12 111222333
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 a=1 at c=11 11 111
|
|
2 Master t2 a=2 at c=11 11 111222
|
|
3 Master t2 a=3 at c=11 11 111222333
|
|
*** slave - correct some data to correspond to the master
|
|
update t1 set b="Slave t1 a=1 at X=11", X=11 where a=1 and d='111';
|
|
delete from t1 where a = 4;
|
|
*** master - update some data, use higher timestamp
|
|
begin;
|
|
update t1 set b="Master t1 a=1 at X=13", X=13 where a=1 and d='111';
|
|
update t1 set b="Master t1 a=2 at X=13", X=13 where a=2 and d='111222';
|
|
update t1 set b="Master t1 a=3 at X=13", X=13 where a=3 and d='111222333';
|
|
update t2 set b="Master t2 a=1 at c=13", c=13 where a=1;
|
|
update t2 set b="Master t2 a=2 at c=13", c=13 where a=2;
|
|
update t2 set b="Master t2 a=3 at c=13", c=13 where a=3;
|
|
commit;
|
|
*** slave - check conflict info, change depends on calling test
|
|
Conflict algorithm counter diff :
|
|
ndb_conflict_fn_old
|
|
6
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # 1 # #
|
|
2 1 # 2 # #
|
|
2 1 # 3 # #
|
|
2 1 # 4 # #
|
|
2 1 # 5 # #
|
|
2 1 # 6 # #
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # # 1 111
|
|
2 1 # # 2 111222
|
|
2 1 # # 2 111222
|
|
2 1 # # 3 111222333
|
|
2 1 # # 3 111222333
|
|
2 1 # # 4 111222333
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** slave - check higer timestamp
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 a=1 at X=13 13 111
|
|
2 Slave t1 a=2 at X=12 12 111222
|
|
3 Slave t1 a=3 at X=12 12 111222333
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 a=1 at c=13 13 111
|
|
2 Master t2 a=2 at c=13 13 111222
|
|
3 Master t2 a=3 at c=13 13 111222333
|
|
drop table t1, t2;
|
|
*** Test 4 ***********************************************************
|
|
* test behaviour with updates logged as writes, but all columns present
|
|
* Should succeed, but miss update conflict detection as no updates are
|
|
* recorded. Bit of a weird test...
|
|
* ********************************************************************
|
|
update mysql.ndb_replication set binlog_type=3;
|
|
create table t1 (a int, b varchar(32), X int unsigned, d varchar(9), primary key (a, d)) engine ndb;
|
|
create table t2 (a int key, b varchar(32), c int unsigned, d varchar(9)) engine ndb;
|
|
************************************************
|
|
* some basic positive testing, i.e. no conflicts
|
|
************************************************
|
|
*** insert some data
|
|
begin;
|
|
insert into t1 values (1, "Master t1 a=1 at X=1", 1, '1');
|
|
insert into t1 values (2, "Master t1 a=2 at X=1", 1, '12');
|
|
insert into t1 values (3, "Master t1 a=3 at X=1", 1, '123');
|
|
insert into t2 values (1, "Master t2 a=1 at c=1", 1, '1');
|
|
insert into t2 values (2, "Master t2 a=2 at c=1", 1, '12');
|
|
insert into t2 values (3, "Master t2 a=3 at c=1", 1, '123');
|
|
commit;
|
|
*** master - update all
|
|
begin;
|
|
update t1 set b="Master t1 X=2", X=X+1;
|
|
update t2 set b="Master t2 c=2", c=c+1;
|
|
commit;
|
|
*** slave - check update all
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 a=1 at X=1 1 1
|
|
2 Master t1 a=2 at X=1 1 12
|
|
3 Master t1 a=3 at X=1 1 123
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 c=2 2 1
|
|
2 Master t2 c=2 2 12
|
|
3 Master t2 c=2 2 123
|
|
Conflict algorithm counter diff :
|
|
ndb_conflict_fn_old
|
|
3
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # 1 # #
|
|
2 1 # 2 # #
|
|
2 1 # 3 # #
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # # 1 1
|
|
2 1 # # 2 12
|
|
2 1 # # 3 123
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** master - update 2 rows in different tables
|
|
update t1 set b="Master t1 a=2 at X=3", X=X+1 where a=2;
|
|
update t2 set b="Master t2 a=3 at c=3", c=c+1 where a=3;
|
|
*** slave - check update 2 rows in different tables
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 a=1 at X=1 1 1
|
|
2 Master t1 a=2 at X=1 1 12
|
|
3 Master t1 a=3 at X=1 1 123
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 c=2 2 1
|
|
2 Master t2 c=2 2 12
|
|
3 Master t2 a=3 at c=3 3 123
|
|
Conflict algorithm counter diff :
|
|
ndb_conflict_fn_old
|
|
4
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # 1 # #
|
|
2 1 # 2 # #
|
|
2 1 # 3 # #
|
|
2 1 # 4 # #
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # # 1 1
|
|
2 1 # # 2 12
|
|
2 1 # # 2 12
|
|
2 1 # # 3 123
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** master - delete all
|
|
delete from t1;
|
|
delete from t2;
|
|
*** slave - check delete all
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 a=1 at X=1 1 1
|
|
2 Master t1 a=2 at X=1 1 12
|
|
3 Master t1 a=3 at X=1 1 123
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
Conflict algorithm counter diff :
|
|
ndb_conflict_fn_old
|
|
7
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # 1 # #
|
|
2 1 # 2 # #
|
|
2 1 # 3 # #
|
|
2 1 # 4 # #
|
|
2 1 # 5 # #
|
|
2 1 # 6 # #
|
|
2 1 # 7 # #
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # # 1 1
|
|
2 1 # # 1 1
|
|
2 1 # # 2 12
|
|
2 1 # # 2 12
|
|
2 1 # # 2 12
|
|
2 1 # # 3 123
|
|
2 1 # # 3 123
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
************************
|
|
* start conflict testing
|
|
************************
|
|
*** master - insert some data
|
|
begin;
|
|
insert into t1 values (1, "Master t1 a=1 at X=10", 10, '111');
|
|
insert into t1 values (2, "Master t1 a=2 at X=10", 10, '111222');
|
|
insert into t1 values (3, "Master t1 a=3 at X=10", 10, '111222333');
|
|
insert into t1 values (4, "Master t1 a=4 at X=10", 10, '111222333');
|
|
insert into t2 values (1, "Master t2 a=1 at c=10", 10, '111');
|
|
insert into t2 values (2, "Master t2 a=2 at c=10", 10, '111222');
|
|
insert into t2 values (3, "Master t2 a=3 at c=10", 10, '111222333');
|
|
insert into t2 values (4, "Master t2 a=4 at c=10", 10, '111222333');
|
|
commit;
|
|
*** slave - check conflict info, no conflicts yet
|
|
Conflict algorithm counter diff :
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** slave - check insert some data
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 a=1 at X=1 1 1
|
|
1 Master t1 a=1 at X=10 10 111
|
|
2 Master t1 a=2 at X=10 10 111222
|
|
2 Master t1 a=2 at X=1 1 12
|
|
3 Master t1 a=3 at X=10 10 111222333
|
|
3 Master t1 a=3 at X=1 1 123
|
|
4 Master t1 a=4 at X=10 10 111222333
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 a=1 at c=10 10 111
|
|
2 Master t2 a=2 at c=10 10 111222
|
|
3 Master t2 a=3 at c=10 10 111222333
|
|
4 Master t2 a=4 at c=10 10 111222333
|
|
*** slave - update some data to cause conflicts
|
|
begin;
|
|
update t1 set b="Slave t1 a=1 at X=12", X=12 where a=1 and d='111';
|
|
update t1 set b="Slave t1 a=2 at X=12", X=12 where a=2 and d='111222';
|
|
update t1 set b="Slave t1 a=3 at X=12", X=12 where a=3 and d='111222333';
|
|
update t1 set b="Slave t1 a=4 at X=12", X=12 where a=4 and d='111222333';
|
|
update t2 set b="Slave t2 a=1 at c=12", c=12 where a=1;
|
|
update t2 set b="Slave t2 a=2 at c=12", c=12 where a=2;
|
|
update t2 set b="Slave t2 a=3 at c=12", c=12 where a=3;
|
|
update t2 set b="Slave t2 a=4 at c=12", c=12 where a=4;
|
|
commit;
|
|
*** master - update some data to cause conflicts
|
|
begin;
|
|
update t1 set b="Master t1 a=1 at X=11", X=11 where a=1 and d='111';
|
|
update t1 set b="Master t1 a=2 at X=11", X=11 where a=2 and d='111222';
|
|
update t1 set b="Master t1 a=3 at X=11", X=11 where a=3 and d='111222333';
|
|
delete from t1 where a = 4;
|
|
update t2 set b="Master t2 a=1 at c=11", c=11 where a=1;
|
|
update t2 set b="Master t2 a=2 at c=11", c=11 where a=2;
|
|
update t2 set b="Master t2 a=3 at c=11", c=11 where a=3;
|
|
delete from t2 where a = 4;
|
|
commit;
|
|
*** slave - check conflict info, there should be some
|
|
Conflict algorithm counter diff :
|
|
ndb_conflict_fn_old
|
|
4
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # 8 # #
|
|
2 1 # 9 # #
|
|
2 1 # 10 # #
|
|
2 1 # 11 # #
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # # 1 111
|
|
2 1 # # 2 111222
|
|
2 1 # # 3 111222333
|
|
2 1 # # 4 111222333
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** slave - check update some data that causes conflicts
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 a=1 at X=1 1 1
|
|
1 Slave t1 a=1 at X=12 12 111
|
|
2 Slave t1 a=2 at X=12 12 111222
|
|
2 Master t1 a=2 at X=1 1 12
|
|
3 Slave t1 a=3 at X=12 12 111222333
|
|
3 Master t1 a=3 at X=1 1 123
|
|
4 Slave t1 a=4 at X=12 12 111222333
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 a=1 at c=11 11 111
|
|
2 Master t2 a=2 at c=11 11 111222
|
|
3 Master t2 a=3 at c=11 11 111222333
|
|
*** slave - correct some data to correspond to the master
|
|
update t1 set b="Slave t1 a=1 at X=11", X=11 where a=1 and d='111';
|
|
delete from t1 where a = 4;
|
|
*** master - update some data, use higher timestamp
|
|
begin;
|
|
update t1 set b="Master t1 a=1 at X=13", X=13 where a=1 and d='111';
|
|
update t1 set b="Master t1 a=2 at X=13", X=13 where a=2 and d='111222';
|
|
update t1 set b="Master t1 a=3 at X=13", X=13 where a=3 and d='111222333';
|
|
update t2 set b="Master t2 a=1 at c=13", c=13 where a=1;
|
|
update t2 set b="Master t2 a=2 at c=13", c=13 where a=2;
|
|
update t2 set b="Master t2 a=3 at c=13", c=13 where a=3;
|
|
commit;
|
|
*** slave - check conflict info, change depends on calling test
|
|
Conflict algorithm counter diff :
|
|
ndb_conflict_fn_old
|
|
7
|
|
Exception table contents
|
|
SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # 8 # #
|
|
2 1 # 9 # #
|
|
2 1 # 10 # #
|
|
2 1 # 11 # #
|
|
2 1 # 12 # #
|
|
2 1 # 13 # #
|
|
2 1 # 14 # #
|
|
SELECT * FROM `t1$EX` ORDER BY a, d;
|
|
server_id master_server_id master_epoch count a d
|
|
2 1 # # 1 111
|
|
2 1 # # 1 111
|
|
2 1 # # 2 111222
|
|
2 1 # # 2 111222
|
|
2 1 # # 3 111222333
|
|
2 1 # # 3 111222333
|
|
2 1 # # 4 111222333
|
|
SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count;
|
|
SELECT * FROM `t2$EX` ORDER BY a, d;
|
|
*** slave - check higer timestamp
|
|
select * from t1 order by a, d;
|
|
a b X d
|
|
1 Master t1 a=1 at X=1 1 1
|
|
1 Slave t1 a=1 at X=11 11 111
|
|
2 Slave t1 a=2 at X=12 12 111222
|
|
2 Master t1 a=2 at X=1 1 12
|
|
3 Slave t1 a=3 at X=12 12 111222333
|
|
3 Master t1 a=3 at X=1 1 123
|
|
select * from t2 order by a, d;
|
|
a b c d
|
|
1 Master t2 a=1 at c=13 13 111
|
|
2 Master t2 a=2 at c=13 13 111222
|
|
3 Master t2 a=3 at c=13 13 111222333
|
|
drop table t1, t2;
|
|
*** Test 5 ***********************************************************
|
|
* test that missing timestamp column in after-image for update, or
|
|
* test before image for delete results in slave stopping
|
|
**********************************************************************
|
|
update mysql.ndb_replication set binlog_type=6;
|
|
create table t1 (a int, b varchar(32), X bigint unsigned, d varchar(9), primary key (a, d)) engine ndb;
|
|
insert into t1 values (1, "Master row 1 at X=1", 1, "1:1");
|
|
insert into t1 values (2, "Master row 2 at X=1", 1, "2:1");
|
|
insert into t1 values (3, "Master row 3 at X=1", 1, "3:1");
|
|
Show update missing timestamp column in before image causes slave failure
|
|
update t1 set b='Blah' where a=1 and d="1:1";
|
|
call mtr.add_suppression(".*missing info necessary for conflict detection.*");
|
|
call mtr.add_suppression(".*Slave SQL for channel '': Could not execute.*rows event on table.*");
|
|
call mtr.add_suppression(".*error 1610.*");
|
|
Wait for slave to choke on that event.
|
|
include/wait_for_slave_sql_error.inc [errno=1296]
|
|
include/stop_slave_io.inc
|
|
RESET SLAVE;
|
|
include/rpl_reset.inc
|
|
Show delete missing timestamp column (in before image) causes
|
|
slave failure
|
|
delete from t1 where a=3 and d="3:1";
|
|
Wait for slave to choke on that event.
|
|
include/wait_for_slave_sql_error.inc [errno=1296]
|
|
include/stop_slave_io.inc
|
|
RESET SLAVE;
|
|
include/rpl_reset.inc
|
|
drop table t1;
|
|
*** test cleanup
|
|
set global ndb_log_update_as_write= @save_luaw;
|
|
set global ndb_log_updated_only = @save_luo;
|
|
include/rpl_end.inc
|