--source include/have_ndb.inc --source include/have_binlog_format_row.inc --source include/master-slave.inc # # Bug #11087 # # connect to the master and create tabe t1 in gotoslave database --connection master CREATE TABLE `t1` ( `nid` int(11) NOT NULL default '0', `nom` char(4) default NULL, `prenom` char(4) default NULL, PRIMARY KEY (`nid`)) ENGINE=ndbcluster DEFAULT CHARSET=latin1; INSERT INTO t1 VALUES(1,"XYZ1","ABC1"); select * from t1 order by nid; --sync_slave_with_master # connect to slave and ensure data it there. --connection slave select * from t1 order by nid; --connection master delete from t1; INSERT INTO t1 VALUES(1,"XYZ2","ABC2"); # Make sure all rows are on the master select * from t1 order by nid; # make sure all rows are on the slave. --sync_slave_with_master --connection slave # Bug #11087 would have row with nid 2 missing select * from t1 order by nid; --connection master DROP table t1; # # Test replication of table with no primary key # --connection master CREATE TABLE `t1` ( `nid` int(11) NOT NULL default '0', `nom` char(4) default NULL, `prenom` char(4) default NULL) ENGINE=ndbcluster DEFAULT CHARSET=latin1; INSERT INTO t1 VALUES(1,"XYZ1","ABC1"),(2,"AAA","BBB"),(3,"CCC","DDD"); select * from t1 order by nid; --sync_slave_with_master # connect to slave and ensure data it there. --connection slave select * from t1 order by nid; --connection master delete from t1 where nid = 2; INSERT INTO t1 VALUES(4,"EEE","FFF"); # Make sure all rows are on the master select * from t1 order by nid; # make sure all rows are on the slave. --sync_slave_with_master --connection slave select * from t1 order by nid; --connection master UPDATE t1 set nid=nid+1; UPDATE t1 set nom="CCP" where nid = 4; select * from t1 order by nid; # make sure all rows are on the slave. --sync_slave_with_master --connection slave select * from t1 order by nid; --connection master DROP table t1; ################################################################## # # Check that retries are made on the slave on some temporary errors # # # 1. Deadlock # --connection master CREATE TABLE `t1` ( `nid` int(11) NOT NULL default '0', `nom` char(4) default NULL, `prenom` char(4) default NULL, PRIMARY KEY USING HASH (`nid`)) ENGINE=ndbcluster DEFAULT CHARSET=latin1; INSERT INTO t1 VALUES(1,"XYZ1","ABC1"); # cause a lock on that row on the slave --sync_slave_with_master --connection slave --echo **** On Slave **** BEGIN; UPDATE t1 SET `nom`="LOCK" WHERE `nid`=1; # set number of retries low so we fail the retries set GLOBAL slave_transaction_retries=1; # now do a change to this row on the master # will deadlock on the slave because of lock above --connection master --echo **** On Master **** UPDATE t1 SET `nom`="DEAD" WHERE `nid`=1; # wait for deadlock to be detected # sleep longer than dead lock detection timeout in config # we do this 2 times, once with few retries to verify that we # get a failure with the set sleep, and once with the _same_ # sleep, but with more retries to get it to succeed --sleep 5 # replication should have stopped, since max retries where not enough # verify with show slave status --connection slave --echo **** On Slave **** --replace_result $MASTER_MYPORT MASTER_PORT --replace_column 1 7 8 9 16 22 23 33 --query_vertical SHOW SLAVE STATUS; # now set max retries high enough to succeed, and start slave again set GLOBAL slave_transaction_retries=10; START SLAVE; # wait for deadlock to be detected and retried # should be the same sleep as above for test to be valid --sleep 5 # commit transaction to release lock on row and let replication succeed select * from t1 order by nid; COMMIT; # verify that the row succeded to be applied on the slave --connection master --sync_slave_with_master --connection slave select * from t1 order by nid; # cleanup --connection master DROP TABLE t1; # # BUG#18094 # Slave caches invalid table definition after atlters causes select failure # --connection master CREATE TABLE t1 (c1 INT KEY) ENGINE=NDB; INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); ALTER TABLE t1 ADD c2 INT; --sync_slave_with_master connection slave; SELECT * FROM t1 ORDER BY c1; connection master; ALTER TABLE t1 CHANGE c2 c2 TEXT CHARACTER SET utf8; ALTER TABLE t1 CHANGE c2 c2 BLOB; --sync_slave_with_master connection slave; # here we would get error 1412 prior to bug SELECT * FROM t1 ORDER BY c1 LIMIT 5; --connection master TRUNCATE t1; SELECT count(*) FROM t1; INSERT INTO t1 VALUES (101,NULL),(102,NULL),(103,NULL),(104,NULL),(105,NULL),(106,NULL),(107,NULL),(108,NULL),(109,NULL),(1010,NULL); --sync_slave_with_master connection slave; SELECT count(*) FROM t1; SELECT c1 FROM t1 ORDER BY c1 LIMIT 5; # cleanup --connection master DROP TABLE t1; -- source include/master-slave-end.inc