--source include/have_binlog_format_row.inc let $SERVER_VERSION=`select version()`; #This test case is not written for NDB, the result files #will not match when NDB is the default engine -- source include/not_ndb_default.inc --source include/master-slave.inc # Bug#15942 (RBR ignores --binlog_ignore_db and tries to map to table # on slave for writes) CREATE DATABASE test_ignore; # --binlog_ignore_db=mysqltest_ignore --echo **** On Master **** SHOW DATABASES; USE test; CREATE TABLE t1 (a INT, b INT); SHOW TABLES; INSERT INTO t1 VALUES (1,1), (2,2); USE test_ignore; CREATE TABLE t2 (a INT, b INT); SHOW TABLES; INSERT INTO t2 VALUES (3,3), (4,4); source include/show_binlog_events.inc; sync_slave_with_master; --echo **** On Slave **** SHOW DATABASES; USE test; SHOW TABLES; --error 1049 USE test_ignore; connection master; DROP DATABASE test_ignore; USE test; DROP TABLE t1; sync_slave_with_master; USE test; # Bug#19995: Extreneous table maps generated for statements that does # not generate rows --source include/rpl_reset.inc connection master; CREATE TABLE t1 (a INT); DELETE FROM t1; INSERT INTO t1 VALUES (1),(2); DELETE FROM t1 WHERE a = 0; UPDATE t1 SET a=99 WHERE a = 0; source include/show_binlog_events.inc; DROP TABLE t1; # BUG#17620: Replicate (Row Based) Fails when Query Cache enabled on # slave --echo ================ Test for BUG#17620 ================ --source include/rpl_reset.inc --echo **** On Slave **** connection slave; SET GLOBAL QUERY_CACHE_SIZE=0; --echo **** On Master **** connection master; CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2),(3); --echo **** On Slave **** sync_slave_with_master; SET GLOBAL QUERY_CACHE_SIZE=16*1024*1024; --echo **** On Master **** connection master; INSERT INTO t1 VALUES (4),(5),(6); --echo **** On Slave **** sync_slave_with_master; SELECT * FROM t1; --echo **** On Master **** connection master; INSERT INTO t1 VALUES (7),(8),(9); --echo **** On Slave **** sync_slave_with_master; SELECT * FROM t1; SET GLOBAL QUERY_CACHE_SIZE=0; --connection master DROP TABLE t1; # Bug#22550: Replication of BIT columns failing --echo ================ Test for BUG#22550 ================ --source include/rpl_reset.inc connection master; CREATE TABLE t1 (a BIT(1), b INT) ENGINE=MYISAM; sync_slave_with_master; connection master; INSERT INTO t1 VALUES(1,2); SELECT HEX(a),b FROM t1; sync_slave_with_master; SELECT HEX(a),b FROM t1; connection master; UPDATE t1 SET a=0 WHERE b=2; SELECT HEX(a),b FROM t1; sync_slave_with_master; SELECT HEX(a),b FROM t1; connection master; DROP TABLE IF EXISTS t1; sync_slave_with_master; # BUG#22583: RBR between MyISAM and non-MyISAM tables containing a BIT # field does not work --echo ================ Test for BUG#22583 ================ --source include/rpl_reset.inc # disabling warnings temporarily for ENGINE=INNODB to work without InnoDB --disable_warnings --echo **** On Master **** connection master; CREATE TABLE t1_myisam (k INT, a BIT(1), b BIT(9)) ENGINE=MYISAM; CREATE TABLE t1_innodb (k INT, a BIT(1), b BIT(9)) ENGINE=INNODB; CREATE TABLE t2_myisam (k INT, a BIT(1) NOT NULL, b BIT(4) NOT NULL) ENGINE=MYISAM; CREATE TABLE t2_innodb (k INT, a BIT(1) NOT NULL, b BIT(4) NOT NULL) ENGINE=INNODB; --echo **** On Slave **** sync_slave_with_master; ALTER TABLE t1_myisam ENGINE=INNODB; ALTER TABLE t1_innodb ENGINE=MYISAM; ALTER TABLE t2_myisam ENGINE=INNODB; ALTER TABLE t2_innodb ENGINE=MYISAM; --enable_warnings --echo **** On Master **** connection master; INSERT INTO t1_myisam VALUES(1, b'0', 257); INSERT INTO t1_myisam VALUES(2, b'1', 256); INSERT INTO t1_innodb VALUES(1, b'0', 257); INSERT INTO t1_innodb VALUES(2, b'1', 256); SELECT k, HEX(a),HEX(b) FROM t1_myisam; SELECT k, HEX(a),HEX(b) FROM t1_innodb; INSERT INTO t2_myisam VALUES(1, b'0', 9); INSERT INTO t2_myisam VALUES(2, b'1', 8); INSERT INTO t2_innodb VALUES(1, b'0', 9); INSERT INTO t2_innodb VALUES(2, b'1', 8); SELECT k, HEX(a),HEX(b) FROM t2_myisam; SELECT k, HEX(a),HEX(b) FROM t2_innodb; --echo **** On Slave **** sync_slave_with_master; SELECT k, HEX(a),HEX(b) FROM t1_myisam; SELECT k, HEX(a),HEX(b) FROM t1_innodb; SELECT k, HEX(a),HEX(b) FROM t2_myisam; SELECT k, HEX(a),HEX(b) FROM t2_innodb; --echo **** On Master **** connection master; UPDATE t1_myisam SET a=0 WHERE k=2; SELECT k, HEX(a),HEX(b) FROM t1_myisam; UPDATE t1_innodb SET a=0 WHERE k=2; SELECT k, HEX(a),HEX(b) FROM t1_innodb; UPDATE t2_myisam SET a=0 WHERE k=2; SELECT k, HEX(a),HEX(b) FROM t2_myisam; UPDATE t2_innodb SET a=0 WHERE k=2; SELECT k, HEX(a),HEX(b) FROM t2_innodb; --echo **** On Slave **** sync_slave_with_master; SELECT k, HEX(a),HEX(b) FROM t1_myisam; SELECT k, HEX(a),HEX(b) FROM t1_innodb; SELECT k, HEX(a),HEX(b) FROM t2_myisam; SELECT k, HEX(a),HEX(b) FROM t2_innodb; --echo **** On Master **** connection master; DROP TABLE IF EXISTS t1_myisam, t1_innodb, t2_myisam, t2_innodb; sync_slave_with_master; # # Bug#27716 multi-update did partially and has not binlogged # connection master; --disable_warnings drop table if exists t1, t2; --enable_warnings CREATE TABLE `t1` ( `a` int(11) NOT NULL auto_increment, `b` int(11) default NULL, PRIMARY KEY (`a`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; CREATE TABLE `t2` ( `a` int(11) NOT NULL auto_increment, `b` int(11) default NULL, PRIMARY KEY (`a`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; # testing multi_update::send_error() effective update insert into t1 values (1,1),(2,2); insert into t2 values (1,1),(4,4); connection master; error ER_DUP_ENTRY; UPDATE t2,t1 SET t2.a=t1.a+2; select * from t2 /* must be (3,1), (4,4) */; sync_slave_with_master; connection slave; select * from t2 /* must be (3,1), (4,4) */; connection master; drop table t1,t2; sync_slave_with_master; # # BUG#31702: Missing row on slave causes assertion failure under # row-based replication # --source include/rpl_reset.inc --echo **** On Master **** connection master; CREATE TABLE t1 (a INT PRIMARY KEY, b SET('master','slave')); INSERT INTO t1 VALUES (1,'master,slave'), (2,'master,slave'); --echo **** On Slave **** sync_slave_with_master; UPDATE t1 SET a = 5, b = 'slave' WHERE a = 1; SELECT * FROM t1 ORDER BY a; # since bug#31552/31609 idempotency is not default any longer. In # order for the preceeding test UPDATE t1 to pass, the mode is switched # temprorarily set @@global.slave_exec_mode= 'IDEMPOTENT'; --echo **** On Master **** connection master; UPDATE t1 SET a = 5, b = 'master' WHERE a = 1; SELECT * FROM t1 ORDER BY a; --echo **** On Slave **** sync_slave_with_master; set @@global.slave_exec_mode= default; let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Error, 1); disable_query_log; eval SELECT "$last_error" AS Last_SQL_Error; enable_query_log; SELECT * FROM t1 ORDER BY a; --echo **** On Master **** connection master; DROP TABLE t1; --source include/rpl_end.inc