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