diff options
author | unknown <knielsen@knielsen-hq.org> | 2013-02-27 18:38:42 +0100 |
---|---|---|
committer | unknown <knielsen@knielsen-hq.org> | 2013-02-27 18:38:42 +0100 |
commit | a7e1860ec0b6a61f5f0b4597c6b89ed84c005c60 (patch) | |
tree | 8595cd0c4113ab6b3ac7996e9cf588914151c82a /mysql-test/suite/multi_source | |
parent | 861830f9c24e965cf5fbd2f7753b285eac070148 (diff) | |
download | mariadb-git-a7e1860ec0b6a61f5f0b4597c6b89ed84c005c60.tar.gz |
MDEV-26: Global Transaction ID.
Add test case demonstrating multi-source replication with GTID.
Test that we can move from being slave of two masters to be a slave
deeper down in the hierarchy (of a higher-up multi-source slave),
and vice versa.
Diffstat (limited to 'mysql-test/suite/multi_source')
-rw-r--r-- | mysql-test/suite/multi_source/gtid.cnf | 24 | ||||
-rw-r--r-- | mysql-test/suite/multi_source/gtid.result | 149 | ||||
-rw-r--r-- | mysql-test/suite/multi_source/gtid.test | 154 |
3 files changed, 327 insertions, 0 deletions
diff --git a/mysql-test/suite/multi_source/gtid.cnf b/mysql-test/suite/multi_source/gtid.cnf new file mode 100644 index 00000000000..b47ebb2cf30 --- /dev/null +++ b/mysql-test/suite/multi_source/gtid.cnf @@ -0,0 +1,24 @@ +!include my.cnf + +[mysqld.1] +log-slave-updates +loose-innodb + +[mysqld.2] +log-slave-updates +loose-innodb + +[mysqld.3] +log-bin=server3-bin +log-slave-updates +loose-innodb + +[mysqld.4] +server-id=4 +log-bin=server4-bin +log-slave-updates +loose-innodb + +[ENV] +SERVER_MYPORT_4= @mysqld.4.port +SERVER_MYSOCK_4= @mysqld.4.socket diff --git a/mysql-test/suite/multi_source/gtid.result b/mysql-test/suite/multi_source/gtid.result new file mode 100644 index 00000000000..5cec6699a72 --- /dev/null +++ b/mysql-test/suite/multi_source/gtid.result @@ -0,0 +1,149 @@ +CHANGE MASTER 'slave1' TO master_port=MYPORT_1, master_host='127.0.0.1', master_user='root'; +CHANGE MASTER 'slave2' TO master_port=MYPORT_2, master_host='127.0.0.1', master_user='root'; +start all slaves; +Warnings: +Note 1936 SLAVE 'slave2' started +Note 1936 SLAVE 'slave1' started +set default_master_connection = 'slave1'; +include/wait_for_slave_to_start.inc +set default_master_connection = 'slave2'; +include/wait_for_slave_to_start.inc +set default_master_connection = ''; +CHANGE MASTER TO master_port=MYPORT_3, master_host='127.0.0.1', master_user='root'; +start all slaves; +Warnings: +Note 1936 SLAVE '' started +include/wait_for_slave_to_start.inc +SET GLOBAL gtid_domain_id= 1; +SET SESSION gtid_domain_id= 1; +CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(10)); +INSERT INTO t1 VALUES (1, "initial"); +CREATE TABLE t3 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB; +INSERT INTO t3 VALUES (101, "initial 1"); +SET GLOBAL gtid_domain_id= 2; +SET SESSION gtid_domain_id= 2; +CREATE TABLE t2 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB; +INSERT INTO t2 VALUES (1, "initial"); +SET SQL_LOG_BIN=0; +CREATE TABLE t3 (a INT PRIMARY KEY, b VARCHAR(10)); +SET SQL_LOG_BIN=1; +INSERT INTO t3 VALUES (201, "initial 2"); +SHOW ALL SLAVES STATUS; +Connection_name +Slave_SQL_State Slave has read all relay log; waiting for the slave I/O thread to update it +Slave_IO_State Waiting for master to send event +Master_Host 127.0.0.1 +Master_User root +Master_Port MYPORT_3 +Connect_Retry 60 +Master_Log_File server3-bin.000001 +Read_Master_Log_Pos 1499 +Relay_Log_File mysqld-relay-bin.000002 +Relay_Log_Pos 1788 +Relay_Master_Log_File server3-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running Yes +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 0 +Last_Error +Skip_Counter 0 +Exec_Master_Log_Pos 1499 +Relay_Log_Space 2086 +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master 0 +Master_SSL_Verify_Server_Cert No +Last_IO_Errno 0 +Last_IO_Error +Last_SQL_Errno 0 +Last_SQL_Error +Replicate_Ignore_Server_Ids +Master_Server_Id 3 +Using_Gtid 0 +Retried_transactions 0 +Max_relay_log_size 1073741824 +Executed_log_entries 25 +Slave_received_heartbeats 0 +Slave_heartbeat_period 60.000 +Gtid_Pos 1-1-4,2-2-3 +*** Now move slave2 to replicate from both master1 and master2 instead of just slave1 *** +STOP ALL SLAVES; +Warnings: +Note 1937 SLAVE '' stopped +INSERT INTO t1 VALUES (2, "switch1"); +INSERT INTO t3 VALUES (102, "switch1 a"); +INSERT INTO t2 VALUES (2, "switch1"); +INSERT INTO t3 VALUES (202, "switch1 b"); +CHANGE MASTER 'slave1' TO master_port=MYPORT_1, master_host='127.0.0.1', master_user='root', master_gtid_pos=auto; +CHANGE MASTER 'slave2' TO master_port=MYPORT_2, master_host='127.0.0.1', master_user='root', master_gtid_pos=auto; +SET default_master_connection = 'slave1'; +START SLAVE; +include/wait_for_slave_to_start.inc +SET default_master_connection = 'slave2'; +START SLAVE; +include/wait_for_slave_to_start.inc +set default_master_connection = ''; +*** Move slave1 to replicate from slave2 instead of from master1 and master2 *** +STOP SLAVE 'slave1'; +INSERT INTO t1 VALUES (3, "switch 2"); +INSERT INTO t3 VALUES (103, "switch 2 a"); +INSERT INTO t2 VALUES (3, "switch 2"); +INSERT INTO t3 VALUES (203, "switch 2 b"); +STOP SLAVE 'slave2'; +INSERT INTO t2 VALUES (4, "switch 3"); +INSERT INTO t3 VALUES (204, "switch 3 b"); +CHANGE MASTER TO master_port=MYPORT_4, master_host='127.0.0.1', master_user='root', master_gtid_pos=auto; +START SLAVE; +SELECT * FROM t1 ORDER BY a; +a b +1 initial +2 switch1 +3 switch 2 +SELECT * FROM t2 ORDER BY a; +a b +1 initial +2 switch1 +3 switch 2 +4 switch 3 +SELECT * FROM t3 ORDER BY a; +a b +101 initial 1 +102 switch1 a +103 switch 2 a +201 initial 2 +202 switch1 b +203 switch 2 b +204 switch 3 b +DROP TABLE t1; +SET SQL_LOG_BIN=0; +DROP TABLE t3; +SET SQL_LOG_BIN=1; +DROP TABLE t2; +DROP TABLE t3; +SET GLOBAL gtid_domain_id=0; +STOP ALL SLAVES; +Warnings: +Note 1937 SLAVE '' stopped +include/reset_master_slave.inc +SET GLOBAL gtid_domain_id=0; +STOP ALL SLAVES; +Warnings: +Note 1937 SLAVE 'slave2' stopped +Note 1937 SLAVE 'slave1' stopped +include/reset_master_slave.inc +SET GLOBAL gtid_domain_id=0; +include/reset_master_slave.inc +SET GLOBAL gtid_domain_id=0; +include/reset_master_slave.inc diff --git a/mysql-test/suite/multi_source/gtid.test b/mysql-test/suite/multi_source/gtid.test new file mode 100644 index 00000000000..ee7c0c40582 --- /dev/null +++ b/mysql-test/suite/multi_source/gtid.test @@ -0,0 +1,154 @@ +--source include/have_innodb.inc + +# +# Test GTID with multi-source +# + +--connect (slave1,127.0.0.1,root,,,$SERVER_MYPORT_3) +--connect (slave2,127.0.0.1,root,,,$SERVER_MYPORT_4) +--connect (master1,127.0.0.1,root,,,$SERVER_MYPORT_1) +--connect (master2,127.0.0.1,root,,,$SERVER_MYPORT_2) + +--connection slave1 +--replace_result $SERVER_MYPORT_1 MYPORT_1 +eval CHANGE MASTER 'slave1' TO master_port=$SERVER_MYPORT_1, master_host='127.0.0.1', master_user='root'; +--replace_result $SERVER_MYPORT_2 MYPORT_2 +eval CHANGE MASTER 'slave2' TO master_port=$SERVER_MYPORT_2, master_host='127.0.0.1', master_user='root'; +start all slaves; +set default_master_connection = 'slave1'; +--source include/wait_for_slave_to_start.inc +set default_master_connection = 'slave2'; +--source include/wait_for_slave_to_start.inc +set default_master_connection = ''; + +--connection slave2 +--replace_result $SERVER_MYPORT_3 MYPORT_3 +eval CHANGE MASTER TO master_port=$SERVER_MYPORT_3, master_host='127.0.0.1', master_user='root'; +start all slaves; +--source include/wait_for_slave_to_start.inc + +--connection master1 +SET GLOBAL gtid_domain_id= 1; +SET SESSION gtid_domain_id= 1; +CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(10)); +INSERT INTO t1 VALUES (1, "initial"); +CREATE TABLE t3 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB; +INSERT INTO t3 VALUES (101, "initial 1"); + +--connection master2 +SET GLOBAL gtid_domain_id= 2; +SET SESSION gtid_domain_id= 2; +CREATE TABLE t2 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB; +INSERT INTO t2 VALUES (1, "initial"); +SET SQL_LOG_BIN=0; +CREATE TABLE t3 (a INT PRIMARY KEY, b VARCHAR(10)); +SET SQL_LOG_BIN=1; +INSERT INTO t3 VALUES (201, "initial 2"); + +--connection slave2 +--let $wait_condition= SELECT COUNT(*)=3 FROM information_schema.tables WHERE table_name IN ("t1", "t2", "t3") AND table_schema = "test" +--source include/wait_condition.inc +--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=1 AND (SELECT COUNT(*) FROM t2)=1 AND (SELECT COUNT(*) FROM t3)=2 +--source include/wait_condition.inc +--replace_result $SERVER_MYPORT_3 MYPORT_3 +query_vertical SHOW ALL SLAVES STATUS; + +--echo *** Now move slave2 to replicate from both master1 and master2 instead of just slave1 *** +STOP ALL SLAVES; + +# Let us have a couple extra transactions on the masters to check that +# we resume replication at the right place even in the middle of the logs. +--connection master1 +INSERT INTO t1 VALUES (2, "switch1"); +INSERT INTO t3 VALUES (102, "switch1 a"); +--connection master2 +INSERT INTO t2 VALUES (2, "switch1"); +INSERT INTO t3 VALUES (202, "switch1 b"); + +--connection slave2 +--replace_result $SERVER_MYPORT_1 MYPORT_1 +eval CHANGE MASTER 'slave1' TO master_port=$SERVER_MYPORT_1, master_host='127.0.0.1', master_user='root', master_gtid_pos=auto; +--replace_result $SERVER_MYPORT_2 MYPORT_2 +eval CHANGE MASTER 'slave2' TO master_port=$SERVER_MYPORT_2, master_host='127.0.0.1', master_user='root', master_gtid_pos=auto; +SET default_master_connection = 'slave1'; +START SLAVE; +--source include/wait_for_slave_to_start.inc +SET default_master_connection = 'slave2'; +START SLAVE; +--source include/wait_for_slave_to_start.inc +set default_master_connection = ''; +--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=2 AND (SELECT COUNT(*) FROM t2)=2 AND (SELECT COUNT(*) FROM t3)=4 +--source include/wait_condition.inc + + +--echo *** Move slave1 to replicate from slave2 instead of from master1 and master2 *** +--connection slave1 +# Set up so that slave1 will have to start from two different positions +# in the slave2 binlog (one for each domain_id). +STOP SLAVE 'slave1'; + +--connection master1 +INSERT INTO t1 VALUES (3, "switch 2"); +INSERT INTO t3 VALUES (103, "switch 2 a"); + +--connection slave2 +--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=3 AND (SELECT COUNT(*) FROM t2)=2 AND (SELECT COUNT(*) FROM t3)=5 +--source include/wait_condition.inc + +--connection master2 +INSERT INTO t2 VALUES (3, "switch 2"); +INSERT INTO t3 VALUES (203, "switch 2 b"); + +--connection slave1 +--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=2 AND (SELECT COUNT(*) FROM t2)=3 AND (SELECT COUNT(*) FROM t3)=5 +--source include/wait_condition.inc +STOP SLAVE 'slave2'; + +--connection master2 +INSERT INTO t2 VALUES (4, "switch 3"); +INSERT INTO t3 VALUES (204, "switch 3 b"); + +--connection slave1 +--replace_result $SERVER_MYPORT_4 MYPORT_4 +eval CHANGE MASTER TO master_port=$SERVER_MYPORT_4, master_host='127.0.0.1', master_user='root', master_gtid_pos=auto; +START SLAVE; +--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=3 AND (SELECT COUNT(*) FROM t2)=4 AND (SELECT COUNT(*) FROM t3)=7 +--source include/wait_condition.inc +SELECT * FROM t1 ORDER BY a; +SELECT * FROM t2 ORDER BY a; +SELECT * FROM t3 ORDER BY a; + +# Cleanup. +--connection master1 +DROP TABLE t1; +SET SQL_LOG_BIN=0; +DROP TABLE t3; +SET SQL_LOG_BIN=1; + +--connection master2 +DROP TABLE t2; +DROP TABLE t3; + +--connection slave1 +SET GLOBAL gtid_domain_id=0; +--let $wait_condition= SELECT COUNT(*)=0 FROM information_schema.tables WHERE table_name IN ("t1", "t2", "t3") AND table_schema = "test" +--source include/wait_condition.inc +STOP ALL SLAVES; +--source reset_master_slave.inc +--disconnect slave1 + +--connection slave2 +SET GLOBAL gtid_domain_id=0; +STOP ALL SLAVES; +--source reset_master_slave.inc +--disconnect slave2 + +--connection master1 +SET GLOBAL gtid_domain_id=0; +--source reset_master_slave.inc +--disconnect master1 + +--connection master2 +SET GLOBAL gtid_domain_id=0; +--source reset_master_slave.inc +--disconnect master2 |