mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
227 lines
7.9 KiB
Plaintext
227 lines
7.9 KiB
Plaintext
# ==== References ====
|
|
#
|
|
# MDEV-21117 recovery for --rpl-semi-sync-slave-enabled server
|
|
# MDEV-27760 event may non stop replicate in circular semisync setup
|
|
#
|
|
|
|
--source include/have_innodb.inc
|
|
--source include/have_debug.inc
|
|
--source include/have_debug_sync.inc
|
|
--source include/have_binlog_format_row.inc
|
|
--source include/master-slave.inc
|
|
|
|
--disable_query_log
|
|
call mtr.add_suppression("Could not read packet:.* errno: 11");
|
|
flush tables;
|
|
--enable_query_log
|
|
|
|
# Initial slave
|
|
--connection server_2
|
|
--source include/stop_slave.inc
|
|
|
|
# Initial master
|
|
--connection server_1
|
|
RESET MASTER;
|
|
SET @@global.max_binlog_size= 4096;
|
|
set @@global.rpl_semi_sync_master_enabled = 1;
|
|
|
|
--connection server_2
|
|
RESET MASTER;
|
|
SET @@global.max_binlog_size= 4096;
|
|
set @@global.rpl_semi_sync_slave_enabled = 1;
|
|
set @@global.gtid_slave_pos = "";
|
|
CHANGE MASTER TO master_use_gtid= slave_pos;
|
|
--source include/start_slave.inc
|
|
|
|
--connection server_1
|
|
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
|
|
set @@global.rpl_semi_sync_master_wait_point=AFTER_SYNC;
|
|
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Innodb;
|
|
INSERT INTO t1 VALUES (1, 'dummy1');
|
|
--save_master_pos
|
|
|
|
--connection server_2
|
|
--sync_with_master
|
|
|
|
--connection server_1
|
|
--let $case = 1
|
|
--echo #
|
|
--echo # Case:$case
|
|
--echo #
|
|
--echo # CRASH the original master, and FAILOVER to the new
|
|
# value 1 for server id 1 -> 2 failover
|
|
--let $failover_to_slave=1
|
|
--let $query_to_crash= INSERT INTO t1 VALUES (2, REPEAT("x", 4100))
|
|
--echo # $query_to_crash
|
|
--echo # Row - 2 will be in master's binlog but not committed, gets replicated
|
|
--echo # to slave and applied. On crash master should have 1 row and slave
|
|
--echo # should have 2 rows.
|
|
--echo #
|
|
--echo # Expected State post crash:
|
|
--echo #=================================================================
|
|
--echo # Master | Slave |
|
|
--echo # 0-1-4 (Not committed) | 0-1-4 (Received through semi-sync |
|
|
--echo # | replication and applied) |
|
|
--echo #=================================================================
|
|
--let $log_search_pattern=truncated binlog file:.*master.*000001
|
|
--let $expected_rows_on_master= 1
|
|
--let $expected_rows_on_slave= 2
|
|
--source rpl_semi_sync_crash.inc
|
|
|
|
--echo #
|
|
--echo # Server_2 promoted as master will send 0-1-4 to new slave Server_1
|
|
--echo #
|
|
--connection server_2
|
|
--let $rows_so_far=3
|
|
--eval INSERT INTO t1 VALUES ($rows_so_far, 'dummy3')
|
|
--save_master_pos
|
|
--echo # The gtid state on current master must be equal to ...
|
|
SHOW VARIABLES LIKE 'gtid_binlog_pos';
|
|
SHOW VARIABLES LIKE 'gtid_binlog_state';
|
|
SHOW VARIABLES LIKE 'gtid_slave_pos';
|
|
|
|
--connection server_1
|
|
--sync_with_master
|
|
--eval SELECT COUNT(*) 'must be $rows_so_far' FROM t1
|
|
--echo # ... the gtid states on the slave:
|
|
SHOW VARIABLES LIKE 'gtid_slave_pos';
|
|
SHOW VARIABLES LIKE 'gtid_binlog_pos';
|
|
SHOW VARIABLES LIKE 'gtid_binlog_state';
|
|
|
|
--connection server_2
|
|
--let $case = 2
|
|
--echo #
|
|
--echo # Case:$case
|
|
--echo #
|
|
--echo # CRASH the new master, and FAILOVER back to the original
|
|
# value 0 for the reverse server id 2 -> 1 failover
|
|
--let $failover_to_slave=0
|
|
# Additionally through "foreign" server_id verify MDEV-27760's acceptance
|
|
# policy on the recent (to be promoted into master) server.
|
|
--let $query_to_crash = SET STATEMENT server_id=1 FOR INSERT INTO t1 VALUES (4, REPEAT("x", 4100))
|
|
--let $query2_to_crash= INSERT INTO t1 VALUES (5, REPEAT("x", 4100))
|
|
--echo # $query_to_crash
|
|
--echo # $query2_to_crash
|
|
--echo # Rows 4 and 5 will be in master's binlog but not committed, they get
|
|
--echo # replicated to slave and applied. On crash master should have 3 rows
|
|
--echo # and slave should have 5 rows.
|
|
--echo #
|
|
--echo # Expected State post crash:
|
|
--echo #=================================================================
|
|
--echo # Master | Slave |
|
|
--echo # 0-1-6 (Not commited) | 0-1-6 (Received through semi-sync |
|
|
--echo # | replication and applied) |
|
|
--echo # 0-2-7 (Not commited) | 0-2-7 (Received through semi-sync |
|
|
--echo # | replication and applied) |
|
|
--echo #=================================================================
|
|
--let $log_search_pattern=truncated binlog file:.*slave.*000002.* to remove transactions starting from GTID 0-1-6
|
|
--let $expected_rows_on_master= 3
|
|
--let $expected_rows_on_slave= 5
|
|
--source rpl_semi_sync_crash.inc
|
|
|
|
--echo #
|
|
--echo # Server_1 promoted as master will send 0-1-6 and 0-2-7 to slave Server_2
|
|
--echo #
|
|
--connection server_1
|
|
--let $rows_so_far=6
|
|
--eval INSERT INTO t1 VALUES ($rows_so_far, 'dummy6')
|
|
--save_master_pos
|
|
--echo # The gtid state on current master must be equal to ...
|
|
SHOW VARIABLES LIKE 'gtid_binlog_pos';
|
|
SHOW VARIABLES LIKE 'gtid_binlog_state';
|
|
SHOW VARIABLES LIKE 'gtid_slave_pos';
|
|
|
|
--connection server_2
|
|
--sync_with_master
|
|
--eval SELECT COUNT(*) 'must be $rows_so_far as' FROM t1
|
|
--echo # ... the gtid states on the slave:
|
|
SHOW VARIABLES LIKE 'gtid_slave_pos';
|
|
SHOW VARIABLES LIKE 'gtid_binlog_pos';
|
|
SHOW VARIABLES LIKE 'gtid_binlog_state';
|
|
|
|
--let $diff_tables=server_1:t1, server_2:t1
|
|
--source include/diff_tables.inc
|
|
|
|
--connection server_1
|
|
--let $case = 3
|
|
--echo #
|
|
--echo # Case:$case
|
|
--echo #
|
|
--echo # CRASH the master and FAILOVER to slave
|
|
--let $failover_to_slave=1
|
|
--let $query_to_crash = INSERT INTO t1 VALUES (7, REPEAT("x", 4100))
|
|
--let $query2_to_crash= INSERT INTO t1 VALUES (8, REPEAT("x", 4100))
|
|
--echo # $query_to_crash
|
|
--echo # $query2_to_crash
|
|
--echo # Rows 7 and 8 will be in master's binlog but not committed, only 7
|
|
--echo # gets replicated to slave and applied. On crash master should have 6
|
|
--echo # rows and slave should have 7 rows.
|
|
--echo #
|
|
--echo # Expected State post crash:
|
|
--echo #=================================================================
|
|
--echo # Master | Slave |
|
|
--echo # 0-1-9 (Not commited) | 0-1-9 (Received through semi-sync |
|
|
--echo # | replication and applied) |
|
|
--echo # 0-1-10 (Not commited - | |
|
|
--echo # never sent to slave) | |
|
|
--echo #=================================================================
|
|
--let $log_search_pattern=truncated binlog file:.*master.*000002.* to remove transactions starting from GTID 0-1-9
|
|
--let $expected_rows_on_master= 6
|
|
--let $expected_rows_on_slave= 7
|
|
--source rpl_semi_sync_crash.inc
|
|
|
|
--echo #
|
|
--echo # Server_2 promoted as master will send 0-1-9 to slave Server_1
|
|
--echo #
|
|
--connection server_2
|
|
--let $rows_so_far=8
|
|
--eval INSERT INTO t1 VALUES ($rows_so_far, 'Done')
|
|
--source include/save_master_gtid.inc
|
|
--echo # The gtid state on current master must be equal to ...
|
|
SHOW VARIABLES LIKE 'gtid_binlog_pos';
|
|
SHOW VARIABLES LIKE 'gtid_binlog_state';
|
|
SHOW VARIABLES LIKE 'gtid_slave_pos';
|
|
|
|
--connection server_1
|
|
--source include/sync_with_master_gtid.inc
|
|
--eval SELECT COUNT(*) 'must be $rows_so_far' FROM t1
|
|
--echo # ... the gtid states on the slave:
|
|
SHOW VARIABLES LIKE 'gtid_slave_pos';
|
|
SHOW VARIABLES LIKE 'gtid_binlog_pos';
|
|
SHOW VARIABLES LIKE 'gtid_binlog_state';
|
|
|
|
--echo #
|
|
--echo # Cleanup
|
|
--echo #
|
|
|
|
--source include/stop_slave.inc
|
|
set global rpl_semi_sync_slave_enabled = 0;
|
|
set global rpl_semi_sync_master_enabled = 0;
|
|
set global rpl_semi_sync_master_wait_point=default;
|
|
RESET MASTER;
|
|
RESET SLAVE;
|
|
|
|
--connection server_2
|
|
RESET MASTER;
|
|
RESET SLAVE;
|
|
set @@global.rpl_semi_sync_master_enabled = 0;
|
|
set @@global.rpl_semi_sync_slave_enabled = 0;
|
|
set @@global.rpl_semi_sync_master_wait_point=default;
|
|
evalp CHANGE MASTER TO master_host='127.0.0.1', master_port=$SERVER_MYPORT_1, master_user='root', master_use_gtid=SLAVE_POS;
|
|
set @@global.gtid_slave_pos=@@global.gtid_binlog_pos;
|
|
--source include/start_slave.inc
|
|
|
|
--connection server_1
|
|
DROP TABLE t1;
|
|
--save_master_pos
|
|
|
|
--connection server_2
|
|
--sync_with_master
|
|
|
|
connection default;
|
|
--enable_reconnect
|
|
--source include/wait_until_connected_again.inc
|
|
|
|
--source include/rpl_end.inc
|