mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 11:01:52 +01:00
98 lines
3.2 KiB
Text
98 lines
3.2 KiB
Text
# In case master's gtid binlog state is divergent from the slave's gtid_slave_pos
|
|
# slave may not be able to connect.
|
|
# For instance when slave is more updated in some of domains, see
|
|
# MDEV-12012 as example, the master's state may require adjustment.
|
|
# In a specific case of an "old" divergent domain, that is there
|
|
# won't be no more event groups from it generated, the states can be
|
|
# made compatible with wiping the problematic domain away. After that slave
|
|
# becomes connectable.
|
|
#
|
|
# Notice that the slave applied gtid state is not really required to
|
|
# be similarly cleaned in order for replication to flow.
|
|
# However this could lead to an expected error when the master
|
|
# resumes binlogging of such domain which the test demonstrate.
|
|
|
|
--source include/master-slave.inc
|
|
|
|
--connection master
|
|
# enforce the default domain_id binlogging explicitly
|
|
SET @@SESSION.gtid_domain_id=0;
|
|
CREATE TABLE t (a INT);
|
|
--sync_slave_with_master
|
|
|
|
--connection slave
|
|
call mtr.add_suppression("connecting slave requested to start from.*which is not in the master's binlog");
|
|
|
|
--source include/stop_slave.inc
|
|
CHANGE MASTER TO master_use_gtid=slave_pos;
|
|
|
|
--connection master
|
|
# create extra gtid domains for binlog state
|
|
--let $extra_domain_id=11
|
|
--let $extra_domain_server_id=111
|
|
--let $extra_gtid_seq_no=1
|
|
--eval SET @@SESSION.gtid_domain_id=$extra_domain_id
|
|
--eval SET @@SESSION.server_id=$extra_domain_server_id
|
|
--eval SET @@SESSION.gtid_seq_no=$extra_gtid_seq_no
|
|
INSERT INTO t SET a=1;
|
|
|
|
#
|
|
# Set up the slave replication state as if slave knows more events from the extra
|
|
# domain.
|
|
#
|
|
--connection slave
|
|
SET @save.gtid_slave_pos=@@global.gtid_slave_pos;
|
|
--eval SET @@global.gtid_slave_pos=concat(@@global.gtid_slave_pos, ",", $extra_domain_id, "-", $extra_domain_server_id, "-", $extra_gtid_seq_no + 1)
|
|
|
|
# unsuccessful attempt to start slave
|
|
START SLAVE IO_THREAD;
|
|
--let $slave_io_errno=1236
|
|
--source include/wait_for_slave_io_error.inc
|
|
|
|
--connection master
|
|
# adjust the master binlog state
|
|
FLUSH BINARY LOGS;
|
|
--let $purge_to_binlog= query_get_value(SHOW MASTER STATUS, File, 1)
|
|
--eval PURGE BINARY LOGS TO '$purge_to_binlog';
|
|
# with final removal of the extra domain
|
|
--eval FLUSH BINARY LOGS DELETE_DOMAIN_ID=($extra_domain_id)
|
|
SELECT @@global.gtid_binlog_pos, @@global.gtid_binlog_state;
|
|
--connection slave
|
|
SELECT @@global.gtid_slave_pos;
|
|
# start the slave sucessfully
|
|
--let rpl_debug=1
|
|
--source include/start_slave.inc
|
|
--let rpl_debug=0
|
|
|
|
--connection master
|
|
# but the following gtid from the *extra* domain will break replication
|
|
INSERT INTO t SET a=1;
|
|
|
|
# take note of the slave io thread error due to being dismissed
|
|
# extra domain at connection to master which tried becoming active;
|
|
# slave is to stop.
|
|
--connection slave
|
|
--let $errno=1236
|
|
--source include/wait_for_slave_io_error.inc
|
|
|
|
# let's apply the very same medicine
|
|
--connection master
|
|
FLUSH BINARY LOGS;
|
|
--let $purge_to_binlog= query_get_value(SHOW MASTER STATUS, File, 1)
|
|
--eval PURGE BINARY LOGS TO '$purge_to_binlog';
|
|
# with final removal of the extra domain
|
|
--eval FLUSH BINARY LOGS DELETE_DOMAIN_ID=($extra_domain_id)
|
|
|
|
--connection slave
|
|
--source include/start_slave.inc
|
|
|
|
#
|
|
# cleanup
|
|
#
|
|
--connection master
|
|
SET @@SESSION.gtid_domain_id=0;
|
|
DROP TABLE t;
|
|
|
|
sync_slave_with_master;
|
|
|
|
--source include/rpl_end.inc
|