1# Test the markings on GTID events (ddl, waited, trans, 2# @@skip_parallel_replication) that are used to control parallel 3# replication on the slave. 4 5--source include/have_innodb.inc 6 7RESET MASTER; 8--source include/wait_for_binlog_checkpoint.inc 9 10CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; 11--let $binlog_pos1=query_get_value(SHOW MASTER STATUS, Position, 1) 12/* GTID */ INSERT INTO t1 VALUES (1,0); 13/* GTID */ BEGIN; 14/* GTID */ INSERT INTO t1 VALUES (2,0); 15/* GTID */ ALTER TABLE t1 ADD c INT; 16/* GTID */ INSERT INTO t1 VALUES (3,0,0); 17/* GTID */ COMMIT; 18/* GTID */ BEGIN; 19/* GTID */ UPDATE t1 SET b=1, c=1 WHERE a=2; 20/* GTID */ CREATE TEMPORARY TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; 21/* GTID */ INSERT INTO t2 VALUES (4,10), (5,20); 22/* GTID */ INSERT INTO t1 SELECT a, 2, b FROM t2; 23/* GTID */ DROP TEMPORARY TABLE t2; 24/* GTID */ INSERT INTO t1 VALUES (6, 3, 0); 25/* GTID */ COMMIT; 26/* GTID */ CREATE TEMPORARY TABLE t3 (a INT PRIMARY KEY) ENGINE=InnoDB; 27/* GTID */ BEGIN; 28/* GTID */ DELETE FROM t1 WHERE a=5; 29/* GTID */ INSERT INTO t3 VALUES (7); 30/* GTID */ INSERT INTO t1 SELECT a, 4, 0 FROM t3; 31/* GTID */ UPDATE t1 SET c=1 WHERE a=7; 32/* GTID */ DROP TEMPORARY TABLE t3; 33/* GTID */ COMMIT; 34/* GTID */ CREATE TEMPORARY TABLE t4 (a INT PRIMARY KEY) ENGINE=InnoDB; 35/* GTID */ BEGIN; 36/* GTID */ INSERT INTO t1 VALUES (8, 5, 0); 37/* GTID */ ALTER TABLE t4 ADD b INT; 38/* GTID */ INSERT INTO t1 VALUES (9, 5, 1); 39/* GTID */ COMMIT; 40connect (tmp_con,localhost,root,,); 41/* GTID */ INSERT INTO t1 VALUES (10, 6, 0); 42/* GTID */ BEGIN; 43/* GTID */ CREATE TEMPORARY TABLE t5 (a INT PRIMARY KEY) ENGINE=InnoDB; 44/* GTID */ INSERT INTO t1 VALUES (11, 7, 0); 45/* GTID */ COMMIT; 46--let $before_drop_pos=query_get_value(SHOW MASTER STATUS, Position, 1) 47disconnect tmp_con; 48connection default; 49 50# We need to wait for the implicit DROP TEMPORARY TABLE to be logged after 51# tmp_con disconnect, otherwise we get sporadic test failures. 52# MDEV-20091: DROP TEMPORARY TABLE IF EXISTS statements will be written to 53# binlog only if the corresponding temporary table exists. In row based 54# replication temporary tables are not replicated hence their corresponding 55# DROP TEMPORARY TABLE statement will be not be written to binary log upon 56# session closure. 57 58if (!`SELECT @@BINLOG_FORMAT = 'ROW'`) { 59--let $wait_condition= SELECT variable_value > $before_drop_pos FROM information_schema.global_status WHERE variable_name = 'binlog_snapshot_position' 60--source include/wait_condition.inc 61} 62--let $binlog_pos2=query_get_value(SHOW MASTER STATUS, Position, 1) 63 64--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) 65FLUSH LOGS; 66 67--let $MYSQLD_DATADIR= `select @@datadir` 68--let $file= $MYSQLTEST_VARDIR/tmp/binlog_parallel_replication_marks.out 69--let OUTPUT_FILE=$file 70exec $MYSQL_BINLOG --start_position=$binlog_pos1 --stop_position=$binlog_pos2 $MYSQLD_DATADIR/$binlog_file > $file; 71 72perl; 73my $file= $ENV{'OUTPUT_FILE'}; 74open F, "<", $file 75 or die "Unable to open file '$file': $!\n"; 76while (<F>) { 77 s/^#\d+ +\d+:\d+:\d+ /# /; 78 s/GTID \d+-\d+-\d+/GTID #-#-#/; 79 s/end_log_pos \d+/end_log_pos #/; 80 s/table id \d+/table id #/; 81 s/mapped to number \d+/mapped to number #/; 82 s/CRC32 0x[0-9a-f]+/CRC32 0x########/; 83 print if /\b(GTID|START TRANSACTION|COMMIT|Table_map|Write_rows|Update_rows|Delete_rows|generated by server|40005 TEMPORARY)\b/; 84} 85close F; 86EOF 87 88DROP TABLE t1; 89