# Testing table creations for row-based replication. --source include/have_binlog_format_row.inc --source include/master-slave.inc --source include/have_innodb.inc connection slave; --source include/have_innodb.inc connection master; # Bug#18326: Do not lock table for writing during prepare of statement # The use of the ps protocol causes extra table maps in the binlog, so # we disable the ps-protocol for this statement. --disable_ps_protocol --disable_query_log --disable_warnings DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9; --enable_warnings --enable_query_log # Set the default storage engine to different values on master and # slave. We need to stop the slave for the server variable to take # effect, since the variable is only read on start-up. sync_slave_with_master; --disable_query_log set @storage_engine = @@global.storage_engine; STOP SLAVE; SET GLOBAL storage_engine=memory; START SLAVE; --enable_query_log --source include/rpl_reset.inc connection master; CREATE TABLE t1 (a INT, b INT); CREATE TABLE t2 (a INT, b INT) ENGINE=Merge; CREATE TABLE t3 (a INT, b INT) CHARSET=utf8; CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8; --source include/show_binlog_events.inc --echo **** On Master **** --query_vertical SHOW CREATE TABLE t1 --query_vertical SHOW CREATE TABLE t2 --query_vertical SHOW CREATE TABLE t3 sync_slave_with_master; --echo **** On Slave **** --query_vertical SHOW CREATE TABLE t1 --query_vertical SHOW CREATE TABLE t2 --query_vertical SHOW CREATE TABLE t3 connection master; CREATE TABLE t5 (b INT, c INT) SELECT * FROM t3; CREATE TEMPORARY TABLE tt3 (a INT, b INT); INSERT INTO tt3 VALUES (1,2), (2,4), (3,6), (4,2), (5,10), (6,12); CREATE TABLE t6 (b INT, c INT) SELECT * FROM tt3; --echo **** On Master **** --query_vertical SHOW CREATE TABLE t5 SELECT * FROM t5 ORDER BY a,b,c; --query_vertical SHOW CREATE TABLE t6 SELECT * FROM t6 ORDER BY a,b,c; sync_slave_with_master; --echo **** On Slave **** --query_vertical SHOW CREATE TABLE t5 SELECT * FROM t5 ORDER BY a,b,c; --query_vertical SHOW CREATE TABLE t6 SELECT * FROM t6 ORDER BY a,b,c; --source include/rpl_reset.inc connection master; # Test for erroneous constructions --error ER_DUP_ENTRY CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3; # Shouldn't be written to the binary log --source include/show_binlog_events.inc # Test that INSERT-SELECT works the same way as for SBR. CREATE TABLE t7 (a INT, b INT UNIQUE); --error ER_DUP_ENTRY INSERT INTO t7 SELECT a,b FROM tt3; SELECT * FROM t7 ORDER BY a,b; # Should be written to the binary log --source include/show_binlog_events.inc sync_slave_with_master; SELECT * FROM t7 ORDER BY a,b; --source include/rpl_reset.inc connection master; CREATE TEMPORARY TABLE tt4 (a INT, b INT); INSERT INTO tt4 VALUES (4,8), (5,10), (6,12); BEGIN; INSERT INTO t7 SELECT a,b FROM tt4; ROLLBACK; --source include/show_binlog_events.inc SELECT * FROM t7 ORDER BY a,b; sync_slave_with_master; SELECT * FROM t7 ORDER BY a,b; --source include/rpl_reset.inc connection master; CREATE TABLE t8 LIKE t4; CREATE TABLE t9 LIKE tt4; CREATE TEMPORARY TABLE tt5 LIKE t4; CREATE TEMPORARY TABLE tt6 LIKE tt4; CREATE TEMPORARY TABLE tt7 SELECT 1; --echo **** On Master **** --query_vertical SHOW CREATE TABLE t8 --query_vertical SHOW CREATE TABLE t9 --source include/show_binlog_events.inc sync_slave_with_master; --echo **** On Slave **** --query_vertical SHOW CREATE TABLE t8 --query_vertical SHOW CREATE TABLE t9 connection master; DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9; sync_slave_with_master; # Here we reset the value of the default storage engine STOP SLAVE; SET GLOBAL storage_engine=@storage_engine; START SLAVE; --enable_ps_protocol # BUG#22864 (Rollback following CREATE ... SELECT discards 'CREATE # table' from log): --echo ================ BUG#22864 ================ --source include/rpl_reset.inc connection master; SET AUTOCOMMIT=0; CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2),(3); CREATE TABLE t2 ENGINE=INNODB SELECT * FROM t1; ROLLBACK; CREATE TABLE t3 ENGINE=INNODB SELECT * FROM t1; INSERT INTO t3 VALUES (4),(5),(6); ROLLBACK; CREATE TABLE t4 ENGINE=INNODB SELECT * FROM t1; INSERT INTO t1 VALUES (4),(5),(6); ROLLBACK; SHOW TABLES; SELECT * FROM t1 ORDER BY a; SELECT * FROM t2 ORDER BY a; SELECT * FROM t3 ORDER BY a; SELECT * FROM t4 ORDER BY a; --source include/show_binlog_events.inc sync_slave_with_master; SHOW TABLES; SELECT * FROM t1 ORDER BY a; SELECT * FROM t2 ORDER BY a; SELECT * FROM t3 ORDER BY a; SELECT * FROM t4 ORDER BY a; connection master; DROP TABLE IF EXISTS t1,t2,t3,t4; SET AUTOCOMMIT=1; sync_slave_with_master; # Some tests with temporary tables --source include/rpl_reset.inc connection master; CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2),(3); CREATE TABLE t2 (a INT) ENGINE=INNODB; BEGIN; INSERT INTO t2 SELECT a*a FROM t1; CREATE TEMPORARY TABLE tt1 SELECT a+1 AS a FROM t1 WHERE a MOD 2 = 1; INSERT INTO t2 SELECT a+2 FROM tt1; COMMIT; SELECT * FROM t2 ORDER BY a; --source include/show_binlog_events.inc sync_slave_with_master; SELECT * FROM t2 ORDER BY a; connection master; TRUNCATE TABLE t2; sync_slave_with_master; --source include/rpl_reset.inc connection master; BEGIN; INSERT INTO t2 SELECT a*a FROM t1; CREATE TEMPORARY TABLE tt2 SELECT a+1 AS a FROM t1 WHERE a MOD 2 = 1; INSERT INTO t2 SELECT a+2 FROM tt2; ROLLBACK; SELECT * FROM t2 ORDER BY a; source include/show_binlog_events.inc; sync_slave_with_master; SELECT * FROM t2 ORDER BY a; connection master; DROP TABLE t1,t2; sync_slave_with_master; # # bug#35762 Failing CREATE-SELECT produces bad binlog in row mode # connection master; CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(1); --error ER_DUP_ENTRY CREATE TABLE t2 (a INT UNIQUE) ENGINE=INNODB SELECT * FROM t1; INSERT INTO t1 VALUES (2); sync_slave_with_master; # connection slave; --echo *** the proof of the fix: --echo select must show that the last insert performed on the slave *** SELECT * FROM t1; connection master; DROP TABLE t1; sync_slave_with_master; # # BUG#34707: Row based replication: slave creates table within wrong database # --source include/rpl_reset.inc connection master; --disable_warnings DROP DATABASE IF EXISTS mysqltest1; --enable_warnings CREATE DATABASE mysqltest1; CREATE TABLE mysqltest1.without_select (f1 BIGINT); CREATE TABLE mysqltest1.with_select AS SELECT 1 AS f1; source include/show_binlog_events.inc; sync_slave_with_master; connection master; DROP DATABASE mysqltest1; sync_slave_with_master; # # BUG#48506: crash in CREATE TABLE IF NOT EXISTS LIKE # with RBL # --source include/rpl_reset.inc connection master; CREATE TEMPORARY TABLE t7(c1 INT); CREATE TABLE t5(c1 INT); CREATE TABLE t4(c1 INT); CREATE VIEW bug48506_t1 AS SELECT 1; CREATE VIEW bug48506_t2 AS SELECT * FROM t4; CREATE VIEW bug48506_t3 AS SELECT t5.c1 AS A, t4.c1 AS B FROM t5, t4; CREATE TABLE bug48506_t4(c1 INT); --disable_warnings sync_slave_with_master; DROP VIEW bug48506_t1, bug48506_t2, bug48506_t3; DROP TABLE bug48506_t4; connection master; CREATE TABLE IF NOT EXISTS bug48506_t1 LIKE t7; CREATE TABLE IF NOT EXISTS bug48506_t2 LIKE t7; CREATE TABLE IF NOT EXISTS bug48506_t3 LIKE t7; CREATE TABLE IF NOT EXISTS bug48506_t4 LIKE t7; --enable_warnings sync_slave_with_master; SHOW TABLES LIKE 'bug48506%'; connection master; DROP VIEW IF EXISTS bug48506_t1, bug48506_t2, bug48506_t3; DROP TEMPORARY TABLES t7; DROP TABLES t4, t5; DROP TABLES IF EXISTS bug48506_t4; sync_slave_with_master; # # Bug#55598 RBR: CREATE TABLE IF NOT EXISTS and INSERT written to binary log # twice # connection master; CREATE TABLE t1 SELECT 1; CREATE TABLE IF NOT EXISTS t1 SELECT 1; --let $diff_tables= master:test.t1,slave:test.t1 --source include/diff_tables.inc DROP TABLE t1; --source include/rpl_end.inc --echo end of the tests