include/rpl_init.inc [topology=1->2]
*** Test crashing master, causing slave IO thread to reconnect while SQL thread is running ***
connection server_1;
call mtr.add_suppression("Checking table:");
call mtr.add_suppression("client is using or hasn't closed the table properly");
call mtr.add_suppression("Table .* is marked as crashed and should be repaired");
call mtr.add_suppression("Could not read packet:.* errno: 11");
flush tables;
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1, 0);
connection server_2; SET sql_log_bin=0;
call mtr.add_suppression('Master command COM_REGISTER_SLAVE failed: failed registering on master, reconnecting to try again');
call mtr.add_suppression('Slave I/O: .*Lost connection to server during query');
call mtr.add_suppression("Slave I/O thread couldn't register on master"); SET sql_log_bin=1;
include/stop_slave.inc
CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT,
MASTER_USE_GTID=SLAVE_POS;
connection server_1;
INSERT INTO t1 VALUES (2,1);
INSERT INTO t1 VALUES (3,1);
connection server_2;
include/start_slave.inc
connection server_1;
include/save_master_gtid.inc SET SESSION debug_dbug="+d,crash_dispatch_command_before";
SELECT 1;
Got one of the listed errors
connection server_2;
include/sync_with_master_gtid.inc
connection server_1;
INSERT INTO t1 VALUES (1000, 3);
include/save_master_gtid.inc
connection server_2;
include/sync_with_master_gtid.inc
connection server_1;
DROP TABLE t1;
*** Test crashing the master mysqld and check that binlog state is recovered. ***
connection server_2;
include/stop_slave.inc
RESET MASTER; SET GLOBAL gtid_slave_pos='';
connection server_1;
include/kill_binlog_dump_threads.inc
RESET MASTER;
SHOW BINLOG EVENTS IN 'master-bin.000001' LIMIT 1,1;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid_list # # []
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
connection server_2;
include/start_slave.inc
connection server_1; SET gtid_domain_id= 1;
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (2);
FLUSH LOGS; SET gtid_domain_id= 2;
INSERT INTO t1 VALUES (3);
FLUSH LOGS;
show binary logs;
Log_name File_size
master-bin.000001 #
master-bin.000002 #
master-bin.000003 #
SHOW BINLOG EVENTS IN 'master-bin.000003' LIMIT 1,1;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000003 # Gtid_list # # # SET SESSION debug_dbug="+d,crash_dispatch_command_before";
SELECT 1;
Got one of the listed errors
show binary logs;
Log_name File_size
master-bin.000001 #
master-bin.000002 #
master-bin.000003 #
master-bin.000004 #
SHOW BINLOG EVENTS IN 'master-bin.000004' LIMIT 1,1;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000004 # Gtid_list # # #
connection server_2;
SELECT * FROM t1 ORDER BY a;
a 1 2 3
*** Test crashing slave at various points and check that it recovers crash-safe. ***
include/stop_slave.inc SET GLOBAL debug_dbug="+d,inject_crash_before_write_rpl_slave_state";
START SLAVE;
connection server_1;
INSERT INTO t1 VALUES (4);
include/save_master_gtid.inc
connection server_2;
include/sync_with_master_gtid.inc
include/stop_slave.inc
START SLAVE; SET GLOBAL debug_dbug="+d,crash_commit_before";
connection server_1;
INSERT INTO t1 VALUES (5);
include/save_master_gtid.inc
connection server_2;
include/sync_with_master_gtid.inc
include/stop_slave.inc
START SLAVE; SET GLOBAL debug_dbug="+d,crash_commit_after";
connection server_1;
INSERT INTO t1 VALUES (6);
include/save_master_gtid.inc
connection server_2;
include/sync_with_master_gtid.inc
include/stop_slave.inc SET GLOBAL debug_dbug="+d,inject_crash_before_flush_rli";
START SLAVE;
connection server_1;
INSERT INTO t1 VALUES (7);
include/save_master_gtid.inc
connection server_2;
include/sync_with_master_gtid.inc
include/stop_slave.inc SET GLOBAL debug_dbug="+d,inject_crash_after_flush_rli";
START SLAVE;
connection server_1;
INSERT INTO t1 VALUES (8);
include/save_master_gtid.inc
connection server_2;
include/sync_with_master_gtid.inc
SELECT * FROM t1 ORDER BY a;
a 1 2 3 4 5 6 7 8
*** MDEV-4725: Incorrect recovery when crash in the middle of writing an event group ***
connection server_2; SET GLOBAL debug_dbug="+d,crash_before_writing_xid";
connection server_1;
INSERT INTO t1 VALUES (9), (10);
connection server_2;
SHOW VARIABLES like 'gtid_strict_mode';
Variable_name Value
gtid_strict_mode ON
include/start_slave.inc
*** MDEV-6462: Incorrect recovery on a slave reconnecting to crashed master ***
connection server_1; set sql_log_bin= 0;
call mtr.add_suppression("Error writing file 'master-bin'"); set sql_log_bin= 1;
connection server_2; set sql_log_bin= 0;
call mtr.add_suppression("The server_id of master server changed in the middle of GTID");
call mtr.add_suppression("Unexpected change of master binlog file name in the middle of GTID"); set sql_log_bin= 1;
connection server_1; SET GLOBAL debug_dbug="+d,inject_error_writing_xid";
BEGIN;
INSERT INTO t1 VALUES (11);
COMMIT; ERROR HY000: Error writing file 'master-bin' (errno: 28"No space left on device") SET GLOBAL debug_dbug="+d,crash_dispatch_command_before";
COMMIT;
Got one of the listed errors
SELECT @@GLOBAL.server_id;
@@GLOBAL.server_id 3
SELECT * from t1 WHERE a > 10 ORDER BY a;
a
gtid_check
Binlog pos ok
# Wait 60 seconds for SQL thread to catch up with IO thread
connection server_2;
SELECT * from t1 WHERE a > 10 ORDER BY a;
a
gtid_check
Binlog pos ok
gtid_check
Slave pos ok
gtid_check
Current pos ok
# Repeat this with additional transactions on the master
connection server_1; SET GLOBAL debug_dbug="+d,inject_error_writing_xid";
BEGIN;
INSERT INTO t1 VALUES (12);
COMMIT; ERROR HY000: Error writing file 'master-bin' (errno: 28"No space left on device") SET GLOBAL debug_dbug="+d,crash_dispatch_command_before";
COMMIT;
Got one of the listed errors
SELECT @@GLOBAL.server_id;
@@GLOBAL.server_id 1
INSERT INTO t1 VALUES (13);
INSERT INTO t1 VALUES (14);
SELECT * from t1 WHERE a > 10 ORDER BY a;
a 13 14
include/save_master_gtid.inc
connection server_2;
include/sync_with_master_gtid.inc
SELECT * from t1 WHERE a > 10 ORDER BY a;
a 13 14
connection server_1; SET GLOBAL debug_dbug="+d,inject_error_writing_xid";
BEGIN;
INSERT INTO t1 VALUES (21);
COMMIT; ERROR HY000: Error writing file 'master-bin' (errno: 28"No space left on device") SET GLOBAL debug_dbug="+d,crash_dispatch_command_before";
COMMIT;
Got one of the listed errors
SELECT @@GLOBAL.server_id;
@@GLOBAL.server_id 1
SELECT * from t1 WHERE a > 10 ORDER BY a;
a 13 14
gtid_check
Binlog pos ok
gtid_check
Current pos ok
# Wait 60 seconds for SQL thread to catch up with IO thread
connection server_2;
SELECT * from t1 WHERE a > 10 ORDER BY a;
a 13 14
gtid_check
Binlog pos ok
gtid_check
Slave pos ok
gtid_check
Current pos ok
# Repeat this with additional transactions on the master
connection server_1; SET GLOBAL debug_dbug="+d,inject_error_writing_xid";
BEGIN;
INSERT INTO t1 VALUES (22);
COMMIT; ERROR HY000: Error writing file 'master-bin' (errno: 28"No space left on device") SET GLOBAL debug_dbug="+d,crash_dispatch_command_before";
COMMIT;
Got one of the listed errors
INSERT INTO t1 VALUES (23);
INSERT INTO t1 VALUES (24);
SELECT * from t1 WHERE a > 10 ORDER BY a;
a 13 14 23 24
include/save_master_gtid.inc
connection server_2;
include/sync_with_master_gtid.inc
SELECT * from t1 WHERE a > 10 ORDER BY a;
a 13 14 23 24
# Repeat this with slave restart
connection server_1; SET GLOBAL debug_dbug="+d,inject_error_writing_xid";
BEGIN;
INSERT INTO t1 VALUES (25);
COMMIT; ERROR HY000: Error writing file 'master-bin' (errno: 28"No space left on device") SET GLOBAL debug_dbug="+d,crash_dispatch_command_before";
COMMIT;
Got one of the listed errors
connection server_1;
connection server_2;
# Wait 60 seconds for IO thread to connect and SQL thread to catch up
# with IO thread.
include/stop_slave.inc
connection server_1;
gtid_check
Binlog pos ok
gtid_check
Current pos ok
INSERT INTO t1 VALUES (26);
INSERT INTO t1 VALUES (27);
SELECT * from t1 WHERE a > 10 ORDER BY a;
a 13 14 23 24 26 27
include/save_master_gtid.inc
connection server_2;
gtid_check
Binlog pos ok
gtid_check
Slave pos ok
gtid_check
Current pos ok
include/start_slave.inc
include/sync_with_master_gtid.inc
SELECT * from t1 WHERE a > 10 ORDER BY a;
a 13 14 23 24 26 27
*** MDEV-6391: GTID binlog state not recovered if mariadb-bin.state is removed ***
connection server_2;
include/stop_slave.inc
connection server_1;
INSERT INTO t1 VALUES (30); SET @old_server_id= @@server_id; SET @old_domain_id= @@gtid_domain_id; SET SESSION server_id= 10;
INSERT INTO t1 VALUES (31);
INSERT INTO t1 VALUES (32); SET SESSION gtid_domain_id= 1; SET SESSION server_id=11;
INSERT INTO t1 VALUES (33); SET SESSION gtid_domain_id= 2;
INSERT INTO t1 VALUES (34); SET SESSION server_id= 10;
INSERT INTO t1 VALUES (35);
INSERT INTO t1 VALUES (36); SET SESSION gtid_domain_id= 0; SET SESSION server_id= 12;
INSERT INTO t1 VALUES (37); SET SESSION gtid_domain_id= @old_domain_id; SET SESSION server_id= @old_server_id;
INSERT INTO t1 VALUES (38);
INSERT INTO t1 VALUES (39);
SELECT * FROM t1 WHERE a >= 30 ORDER BY a;
a 30 31 32 33 34 35 36 37 38 39
include/save_master_gtid.inc
connection server_2;
include/start_slave.inc
include/sync_with_master_gtid.inc
SELECT * FROM t1 WHERE a >= 30 ORDER BY a;
a 30 31 32 33 34 35 36 37 38 39
connection server_1;
DROP TABLE t1;
connection default;
include/rpl_end.inc
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.7 Sekunden
(vorverarbeitet am 2026-10-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.