1include/rpl_init.inc [topology=1->2] 2*** Test crashing master, causing slave IO thread to reconnect while SQL thread is running *** 3connection server_1; 4call mtr.add_suppression("Checking table:"); 5call mtr.add_suppression("client is using or hasn't closed the table properly"); 6call mtr.add_suppression("Table .* is marked as crashed and should be repaired"); 7flush tables; 8ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB; 9CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; 10INSERT INTO t1 VALUES (1, 0); 11connection server_2; 12SET sql_log_bin=0; 13call mtr.add_suppression('Master command COM_REGISTER_SLAVE failed: failed registering on master, reconnecting to try again'); 14SET sql_log_bin=1; 15include/stop_slave.inc 16CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT, 17MASTER_USE_GTID=CURRENT_POS; 18connection server_1; 19INSERT INTO t1 VALUES (2,1); 20INSERT INTO t1 VALUES (3,1); 21connection server_2; 22include/start_slave.inc 23connection server_1; 24include/save_master_gtid.inc 25SET SESSION debug_dbug="+d,crash_dispatch_command_before"; 26SELECT 1; 27Got one of the listed errors 28connection server_2; 29include/sync_with_master_gtid.inc 30connection server_1; 31INSERT INTO t1 VALUES (1000, 3); 32include/save_master_gtid.inc 33connection server_2; 34include/sync_with_master_gtid.inc 35connection server_1; 36DROP TABLE t1; 37*** Test crashing the master mysqld and check that binlog state is recovered. *** 38connection server_2; 39include/stop_slave.inc 40RESET MASTER; 41SET GLOBAL gtid_slave_pos=''; 42connection server_1; 43RESET MASTER; 44SHOW BINLOG EVENTS IN 'master-bin.000001' LIMIT 1,1; 45Log_name Pos Event_type Server_id End_log_pos Info 46master-bin.000001 # Gtid_list # # [] 47CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; 48connection server_2; 49include/start_slave.inc 50connection server_1; 51SET gtid_domain_id= 1; 52INSERT INTO t1 VALUES (1); 53INSERT INTO t1 VALUES (2); 54FLUSH LOGS; 55SET gtid_domain_id= 2; 56INSERT INTO t1 VALUES (3); 57FLUSH LOGS; 58show binary logs; 59Log_name File_size 60master-bin.000001 # 61master-bin.000002 # 62master-bin.000003 # 63SHOW BINLOG EVENTS IN 'master-bin.000003' LIMIT 1,1; 64Log_name Pos Event_type Server_id End_log_pos Info 65master-bin.000003 # Gtid_list # # # 66SET SESSION debug_dbug="+d,crash_dispatch_command_before"; 67SELECT 1; 68Got one of the listed errors 69show binary logs; 70Log_name File_size 71master-bin.000001 # 72master-bin.000002 # 73master-bin.000003 # 74master-bin.000004 # 75SHOW BINLOG EVENTS IN 'master-bin.000004' LIMIT 1,1; 76Log_name Pos Event_type Server_id End_log_pos Info 77master-bin.000004 # Gtid_list # # # 78connection server_2; 79SELECT * FROM t1 ORDER BY a; 80a 811 822 833 84*** Test crashing slave at various points and check that it recovers crash-safe. *** 85include/stop_slave.inc 86SET GLOBAL debug_dbug="+d,inject_crash_before_write_rpl_slave_state"; 87START SLAVE; 88connection server_1; 89INSERT INTO t1 VALUES (4); 90include/save_master_gtid.inc 91connection server_2; 92include/sync_with_master_gtid.inc 93include/stop_slave.inc 94START SLAVE; 95SET GLOBAL debug_dbug="+d,crash_commit_before"; 96connection server_1; 97INSERT INTO t1 VALUES (5); 98include/save_master_gtid.inc 99connection server_2; 100include/sync_with_master_gtid.inc 101include/stop_slave.inc 102START SLAVE; 103SET GLOBAL debug_dbug="+d,crash_commit_after"; 104connection server_1; 105INSERT INTO t1 VALUES (6); 106include/save_master_gtid.inc 107connection server_2; 108include/sync_with_master_gtid.inc 109include/stop_slave.inc 110SET GLOBAL debug_dbug="+d,inject_crash_before_flush_rli"; 111START SLAVE; 112connection server_1; 113INSERT INTO t1 VALUES (7); 114include/save_master_gtid.inc 115connection server_2; 116include/sync_with_master_gtid.inc 117include/stop_slave.inc 118SET GLOBAL debug_dbug="+d,inject_crash_after_flush_rli"; 119START SLAVE; 120connection server_1; 121INSERT INTO t1 VALUES (8); 122include/save_master_gtid.inc 123connection server_2; 124include/sync_with_master_gtid.inc 125SELECT * FROM t1 ORDER BY a; 126a 1271 1282 1293 1304 1315 1326 1337 1348 135*** MDEV-4725: Incorrect recovery when crash in the middle of writing an event group *** 136connection server_2; 137SET GLOBAL debug_dbug="+d,crash_before_writing_xid"; 138connection server_1; 139INSERT INTO t1 VALUES (9), (10); 140connection server_2; 141SHOW VARIABLES like 'gtid_strict_mode'; 142Variable_name Value 143gtid_strict_mode ON 144include/start_slave.inc 145*** MDEV-6462: Incorrect recovery on a slave reconnecting to crashed master *** 146connection server_1; 147set sql_log_bin= 0; 148call mtr.add_suppression("Error writing file 'master-bin'"); 149set sql_log_bin= 1; 150connection server_2; 151set sql_log_bin= 0; 152call mtr.add_suppression("The server_id of master server changed in the middle of GTID"); 153call mtr.add_suppression("Unexpected change of master binlog file name in the middle of GTID"); 154set sql_log_bin= 1; 155connection server_1; 156SET GLOBAL debug_dbug="+d,inject_error_writing_xid"; 157BEGIN; 158INSERT INTO t1 VALUES (11); 159COMMIT; 160ERROR HY000: Error writing file 'master-bin' (errno: 28 "No space left on device") 161SET GLOBAL debug_dbug="+d,crash_dispatch_command_before"; 162COMMIT; 163Got one of the listed errors 164SELECT @@GLOBAL.server_id; 165@@GLOBAL.server_id 1663 167SELECT * from t1 WHERE a > 10 ORDER BY a; 168a 169gtid_check 170Binlog pos ok 171# Wait 30 seconds for SQL thread to catch up with IO thread 172connection server_2; 173SELECT * from t1 WHERE a > 10 ORDER BY a; 174a 175gtid_check 176Binlog pos ok 177gtid_check 178Slave pos ok 179gtid_check 180Current pos ok 181# Repeat this with additional transactions on the master 182connection server_1; 183SET GLOBAL debug_dbug="+d,inject_error_writing_xid"; 184BEGIN; 185INSERT INTO t1 VALUES (12); 186COMMIT; 187ERROR HY000: Error writing file 'master-bin' (errno: 28 "No space left on device") 188SET GLOBAL debug_dbug="+d,crash_dispatch_command_before"; 189COMMIT; 190Got one of the listed errors 191SELECT @@GLOBAL.server_id; 192@@GLOBAL.server_id 1931 194INSERT INTO t1 VALUES (13); 195INSERT INTO t1 VALUES (14); 196SELECT * from t1 WHERE a > 10 ORDER BY a; 197a 19813 19914 200include/save_master_gtid.inc 201connection server_2; 202include/sync_with_master_gtid.inc 203SELECT * from t1 WHERE a > 10 ORDER BY a; 204a 20513 20614 207connection server_1; 208SET GLOBAL debug_dbug="+d,inject_error_writing_xid"; 209BEGIN; 210INSERT INTO t1 VALUES (21); 211COMMIT; 212ERROR HY000: Error writing file 'master-bin' (errno: 28 "No space left on device") 213SET GLOBAL debug_dbug="+d,crash_dispatch_command_before"; 214COMMIT; 215Got one of the listed errors 216SELECT @@GLOBAL.server_id; 217@@GLOBAL.server_id 2181 219SELECT * from t1 WHERE a > 10 ORDER BY a; 220a 22113 22214 223gtid_check 224Binlog pos ok 225gtid_check 226Current pos ok 227# Wait 30 seconds for SQL thread to catch up with IO thread 228connection server_2; 229SELECT * from t1 WHERE a > 10 ORDER BY a; 230a 23113 23214 233gtid_check 234Binlog pos ok 235gtid_check 236Slave pos ok 237gtid_check 238Current pos ok 239# Repeat this with additional transactions on the master 240connection server_1; 241SET GLOBAL debug_dbug="+d,inject_error_writing_xid"; 242BEGIN; 243INSERT INTO t1 VALUES (22); 244COMMIT; 245ERROR HY000: Error writing file 'master-bin' (errno: 28 "No space left on device") 246SET GLOBAL debug_dbug="+d,crash_dispatch_command_before"; 247COMMIT; 248Got one of the listed errors 249INSERT INTO t1 VALUES (23); 250INSERT INTO t1 VALUES (24); 251SELECT * from t1 WHERE a > 10 ORDER BY a; 252a 25313 25414 25523 25624 257include/save_master_gtid.inc 258connection server_2; 259include/sync_with_master_gtid.inc 260SELECT * from t1 WHERE a > 10 ORDER BY a; 261a 26213 26314 26423 26524 266# Repeat this with slave restart 267connection server_1; 268SET GLOBAL debug_dbug="+d,inject_error_writing_xid"; 269BEGIN; 270INSERT INTO t1 VALUES (25); 271COMMIT; 272ERROR HY000: Error writing file 'master-bin' (errno: 28 "No space left on device") 273SET GLOBAL debug_dbug="+d,crash_dispatch_command_before"; 274COMMIT; 275Got one of the listed errors 276connection server_1; 277connection server_2; 278# Wait 30 seconds for IO thread to connect and SQL thread to catch up 279# with IO thread. 280include/stop_slave.inc 281connection server_1; 282gtid_check 283Binlog pos ok 284gtid_check 285Current pos ok 286INSERT INTO t1 VALUES (26); 287INSERT INTO t1 VALUES (27); 288SELECT * from t1 WHERE a > 10 ORDER BY a; 289a 29013 29114 29223 29324 29426 29527 296include/save_master_gtid.inc 297connection server_2; 298gtid_check 299Binlog pos ok 300gtid_check 301Slave pos ok 302gtid_check 303Current pos ok 304include/start_slave.inc 305include/sync_with_master_gtid.inc 306SELECT * from t1 WHERE a > 10 ORDER BY a; 307a 30813 30914 31023 31124 31226 31327 314*** MDEV-6391: GTID binlog state not recovered if mariadb-bin.state is removed *** 315connection server_2; 316include/stop_slave.inc 317connection server_1; 318INSERT INTO t1 VALUES (30); 319SET @old_server_id= @@server_id; 320SET @old_domain_id= @@gtid_domain_id; 321SET SESSION server_id= 10; 322INSERT INTO t1 VALUES (31); 323INSERT INTO t1 VALUES (32); 324SET SESSION gtid_domain_id= 1; 325SET SESSION server_id=11; 326INSERT INTO t1 VALUES (33); 327SET SESSION gtid_domain_id= 2; 328INSERT INTO t1 VALUES (34); 329SET SESSION server_id= 10; 330INSERT INTO t1 VALUES (35); 331INSERT INTO t1 VALUES (36); 332SET SESSION gtid_domain_id= 0; 333SET SESSION server_id= 12; 334INSERT INTO t1 VALUES (37); 335SET SESSION gtid_domain_id= @old_domain_id; 336SET SESSION server_id= @old_server_id; 337INSERT INTO t1 VALUES (38); 338INSERT INTO t1 VALUES (39); 339SELECT * FROM t1 WHERE a >= 30 ORDER BY a; 340a 34130 34231 34332 34433 34534 34635 34736 34837 34938 35039 351include/save_master_gtid.inc 352connection server_2; 353include/start_slave.inc 354include/sync_with_master_gtid.inc 355SELECT * FROM t1 WHERE a >= 30 ORDER BY a; 356a 35730 35831 35932 36033 36134 36235 36336 36437 36538 36639 367connection server_1; 368DROP TABLE t1; 369connection default; 370include/rpl_end.inc 371