--source include/have_innodb.inc --let $rpl_topology=1->2 --source include/rpl_init.inc # Test various aspects of parallel replication. --connection server_2 SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads; --source include/stop_slave.inc SET GLOBAL slave_parallel_threads=10; SET @old_max_relay= @@GLOBAL.max_relay_log_size; SET GLOBAL max_relay_log_size = 4096; CHANGE MASTER TO master_use_gtid=slave_pos; --source include/start_slave.inc --connection server_1 ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB; CREATE TABLE t1 (a int PRIMARY KEY, b VARCHAR(100)) ENGINE=InnoDB; INSERT INTO t1 VALUES (1, "a"); --save_master_pos --connection server_2 --sync_with_master --echo *** Create a long transaction that will span a relay log file. *** --connection server_1 # Add some transactions in separate domains, that will cause the need to # have a multi-valued restart position in the relay log for the SQL thread. SET @old_domain= @@gtid_domain_id; SET gtid_domain_id=10; INSERT INTO t1 VALUES (10000, "domain 10"); SET gtid_domain_id=20; INSERT INTO t1 VALUES (20000, "domain 20"); SET gtid_domain_id=@old_domain; BEGIN; --echo [lots of inserts omitted] --disable_query_log --let $count = 500 while ($count) { eval INSERT INTO t1 VALUES (1000+$count, REPEAT("hulubulu??!?", 8)); dec $count; } --enable_query_log COMMIT; --save_master_pos --connection server_2 --sync_with_master --connection server_1 # Now do another one, to make the inuse_relaylog proceed to somewhere inside # the first large transaction. BEGIN; --echo [lots of inserts omitted] --disable_query_log --let $count = 500 while ($count) { eval INSERT INTO t1 VALUES (2000+$count, REPEAT("hulubulu??!?", 8)); dec $count; } --enable_query_log COMMIT; --save_master_pos --connection server_2 --sync_with_master # Stop and restart the SQL thread only. # The bug was that the SQL thread would restart at the start # of a relay log file, which could be in the middle of an event group. # This way, part of that event group could be wrongly re-applied. --source include/stop_slave_sql.inc START SLAVE SQL_THREAD; --source include/wait_for_slave_to_start.inc --connection server_1 INSERT INTO t1 VALUES (100000, "More stuffs."); INSERT INTO t1 VALUES (100001, "And even more"); --save_master_pos --connection server_2 --sync_with_master SELECT * FROM t1 WHERE a >= 100000 ORDER BY a; # Clean up. --connection server_2 --source include/stop_slave.inc SET GLOBAL slave_parallel_threads=@old_parallel_threads; SET GLOBAL max_relay_log_size= @old_max_relay; --source include/start_slave.inc --connection server_1 ALTER TABLE mysql.gtid_slave_pos ENGINE=Aria; DROP TABLE t1; --source include/rpl_end.inc