include/rpl_init.inc [topology=1->2->3->4] *** GTID position should be empty here *** SELECT BINLOG_GTID_POS('',); BINLOG_GTID_POS('',) CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=MyISAM; CREATE TABLE t2 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB; INSERT INTO t1 VALUES (1, "m1"); INSERT INTO t1 VALUES (2, "m2"), (3, "m3"), (4, "m4"); INSERT INTO t2 VALUES (1, "i1"); BEGIN; INSERT INTO t2 VALUES (2, "i2"), (3, "i3"); INSERT INTO t2 VALUES (4, "i4"); COMMIT; *** GTID position should be non-empty here *** SELECT BINLOG_GTID_POS('',); BINLOG_GTID_POS('',) *** GTID position should be the same as on server_1 *** SELECT BINLOG_GTID_POS('',); BINLOG_GTID_POS('',) SELECT * FROM t1 ORDER BY a; a b 1 m1 2 m2 3 m3 4 m4 SELECT * FROM t2 ORDER BY a; a b 1 i1 2 i2 3 i3 4 i4 SELECT * FROM t1 ORDER BY a; a b 1 m1 2 m2 3 m3 4 m4 SELECT * FROM t2 ORDER BY a; a b 1 i1 2 i2 3 i3 4 i4 SELECT * FROM t1 ORDER BY a; a b 1 m1 2 m2 3 m3 4 m4 SELECT * FROM t2 ORDER BY a; a b 1 i1 2 i2 3 i3 4 i4 *** Now take out D, let it fall behind a bit, and then test re-attaching it to A *** include/stop_slave.inc INSERT INTO t1 VALUES (5, "m1a"); INSERT INTO t2 VALUES (5, "i1a"); CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT, MASTER_USE_GTID=SLAVE_POS; SET GLOBAL sql_slave_skip_counter=1; ERROR HY000: When using GTID, @@sql_slave_skip_counter can not be used. Instead, setting @@gtid_slave_pos explicitly can be used to skip to after a given GTID position. CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT, MASTER_USE_GTID=CURRENT_POS; SET GLOBAL sql_slave_skip_counter=10; ERROR HY000: When using GTID, @@sql_slave_skip_counter can not be used. Instead, setting @@gtid_slave_pos explicitly can be used to skip to after a given GTID position. include/start_slave.inc SELECT * FROM t1 ORDER BY a; a b 1 m1 2 m2 3 m3 4 m4 5 m1a SELECT * FROM t2 ORDER BY a; a b 1 i1 2 i2 3 i3 4 i4 5 i1a *** Now move B to D (C is still replicating from B) *** include/stop_slave.inc CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_4, MASTER_USE_GTID=CURRENT_POS; include/start_slave.inc UPDATE t2 SET b="j1a" WHERE a=5; SELECT * FROM t1 ORDER BY a; a b 1 m1 2 m2 3 m3 4 m4 5 m1a SELECT * FROM t2 ORDER BY a; a b 1 i1 2 i2 3 i3 4 i4 5 j1a *** Now move C to D, after letting it fall a little behind *** include/stop_slave.inc INSERT INTO t2 VALUES (6, "i6b"); INSERT INTO t2 VALUES (7, "i7b"); include/save_master_gtid.inc CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_4, MASTER_USE_GTID=CURRENT_POS; include/start_slave.inc include/sync_with_master_gtid.inc SELECT * FROM t2 ORDER BY a; a b 1 i1 2 i2 3 i3 4 i4 5 j1a 6 i6b 7 i7b *** Now change everything back to what it was, to make rpl_end.inc happy include/sync_with_master_gtid.inc include/stop_slave.inc CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_MYPORT; include/start_slave.inc include/wait_for_slave_to_start.inc include/stop_slave.inc CHANGE MASTER TO master_host = '127.0.0.1', master_port = SLAVE_MYPORT; include/start_slave.inc include/sync_with_master_gtid.inc include/stop_slave.inc CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_3; include/start_slave.inc DROP TABLE t1,t2; include/save_master_gtid.inc *** A few more checks for BINLOG_GTID_POS function *** SELECT BINLOG_GTID_POS(); ERROR 42000: Incorrect parameter count in the call to native function 'BINLOG_GTID_POS' SELECT BINLOG_GTID_POS('a'); ERROR 42000: Incorrect parameter count in the call to native function 'BINLOG_GTID_POS' SELECT BINLOG_GTID_POS('a',1,NULL); ERROR 42000: Incorrect parameter count in the call to native function 'BINLOG_GTID_POS' SELECT BINLOG_GTID_POS(1,'a'); BINLOG_GTID_POS(1,'a') NULL Warnings: Warning 1292 Truncated incorrect INTEGER value: 'a' SELECT BINLOG_GTID_POS(NULL,NULL); BINLOG_GTID_POS(NULL,NULL) NULL SELECT BINLOG_GTID_POS('',1); BINLOG_GTID_POS('',1) SELECT BINLOG_GTID_POS('a',1); BINLOG_GTID_POS('a',1) NULL SELECT BINLOG_GTID_POS('master-bin.000001',-1); BINLOG_GTID_POS('master-bin.000001',-1) NULL SELECT BINLOG_GTID_POS('master-bin.000001',0); BINLOG_GTID_POS('master-bin.000001',0) SELECT BINLOG_GTID_POS('master-bin.000001',18446744073709551615); BINLOG_GTID_POS('master-bin.000001',18446744073709551615) NULL SELECT BINLOG_GTID_POS('master-bin.000001',18446744073709551616); BINLOG_GTID_POS('master-bin.000001',18446744073709551616) NULL Warnings: Warning 1916 Got overflow when converting '18446744073709551616' to INT. Value truncated. *** Some tests of @@GLOBAL.gtid_binlog_state *** include/sync_with_master_gtid.inc include/stop_slave.inc SET @old_state= @@GLOBAL.gtid_binlog_state; SET GLOBAL gtid_binlog_state = ''; ERROR HY000: This operation is not allowed if any GTID has been logged to the binary log. Run RESET MASTER first to erase the log RESET MASTER; SET GLOBAL gtid_binlog_state = ''; FLUSH LOGS; show binary logs; Log_name File_size master-bin.000001 # master-bin.000002 # SET GLOBAL gtid_binlog_state = '0-1-10,1-2-20,0-3-30'; show binary logs; Log_name File_size master-bin.000001 # include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Format_desc # # SERVER_VERSION, BINLOG_VERSION master-bin.000001 # Gtid_list # # [1-2-20,0-1-10,0-3-30] master-bin.000001 # Binlog_checkpoint # # master-bin.000001 SELECT @@GLOBAL.gtid_binlog_pos; @@GLOBAL.gtid_binlog_pos 1-2-20,0-3-30 SELECT @@GLOBAL.gtid_binlog_state; @@GLOBAL.gtid_binlog_state 1-2-20,0-1-10,0-3-30 SET GLOBAL gtid_binlog_state = @old_state; ERROR HY000: This operation is not allowed if any GTID has been logged to the binary log. Run RESET MASTER first to erase the log RESET MASTER; SET GLOBAL gtid_binlog_state = @old_state; CREATE TABLE t1 (a INT PRIMARY KEY); SET gtid_seq_no=100; INSERT INTO t1 VALUES (1); include/save_master_gtid.inc include/start_slave.inc include/sync_with_master_gtid.inc SELECT * FROM t1; a 1 Gtid_IO_Pos = '0-1-100' *** Test @@LAST_GTID and MASTER_GTID_WAIT() *** DROP TABLE t1; CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; include/stop_slave.inc SELECT @@last_gtid; @@last_gtid SET gtid_seq_no=110; SELECT @@last_gtid; @@last_gtid BEGIN; SELECT @@last_gtid; @@last_gtid INSERT INTO t1 VALUES (2); SELECT @@last_gtid; @@last_gtid COMMIT; SELECT @@last_gtid; @@last_gtid 0-1-110 SET @pos= '0-1-110'; SELECT master_gtid_wait(NULL); master_gtid_wait(NULL) NULL SELECT master_gtid_wait('', NULL); master_gtid_wait('', NULL) 0 SELECT master_gtid_wait(@pos, 0.5); master_gtid_wait(@pos, 0.5) -1 SELECT * FROM t1 ORDER BY a; a SELECT master_gtid_wait(@pos); include/start_slave.inc master_gtid_wait(@pos) 0 SELECT * FROM t1 ORDER BY a; a 2 include/stop_slave.inc SET gtid_domain_id= 1; INSERT INTO t1 VALUES (3); SET @pos= '1-1-1,0-1-110'; SELECT master_gtid_wait(@pos, 0); master_gtid_wait(@pos, 0) -1 SELECT * FROM t1 WHERE a >= 3; a SELECT master_gtid_wait(@pos, -1); include/start_slave.inc master_gtid_wait(@pos, -1) 0 SELECT * FROM t1 WHERE a >= 3; a 3 SELECT master_gtid_wait('1-1-1', 0); master_gtid_wait('1-1-1', 0) 0 SELECT master_gtid_wait('2-1-1,1-1-4,0-1-110'); SELECT master_gtid_wait('0-1-1000', 0.5); SELECT master_gtid_wait('0-1-2000'); SELECT master_gtid_wait('2-1-10'); SELECT master_gtid_wait('2-1-6', 1); SELECT master_gtid_wait('2-1-5'); SELECT master_gtid_wait('2-1-10'); SELECT master_gtid_wait('2-1-5,1-1-4,0-1-110'); SELECT master_gtid_wait('2-1-2'); SELECT master_gtid_wait('1-1-1'); master_gtid_wait('1-1-1') 0 SELECT master_gtid_wait('0-1-109'); SELECT master_gtid_wait('2-1-2', 0.5); master_gtid_wait('2-1-2', 0.5) -1 KILL QUERY KILL_ID; ERROR 70100: Query execution was interrupted SET gtid_domain_id=2; SET gtid_seq_no=2; INSERT INTO t1 VALUES (4); master_gtid_wait('2-1-2') 0 KILL CONNECTION KILL_ID; ERROR HY000: Lost connection to MySQL server during query SET gtid_domain_id=1; SET gtid_seq_no=4; INSERT INTO t1 VALUES (5); SET gtid_domain_id=2; SET gtid_seq_no=5; INSERT INTO t1 VALUES (6); master_gtid_wait('2-1-5,1-1-4,0-1-110') 0 master_gtid_wait('2-1-1,1-1-4,0-1-110') 0 master_gtid_wait('0-1-1000', 0.5) -1 master_gtid_wait('2-1-6', 1) -1 master_gtid_wait('0-1-109') 0 SET gtid_domain_id=2; SET gtid_seq_no=10; INSERT INTO t1 VALUES (7); master_gtid_wait('2-1-10') 0 master_gtid_wait('2-1-10') 0 DROP TABLE t1; include/rpl_end.inc