--source include/master-slave.inc --echo # --echo # New --dump-slave, --apply-slave-statements functionality --echo # # There is a gap between when START SLAVE returns and when MASTER_LOG_FILE and # MASTER_LOG_POS are set. Ensure that we don't call SHOW SLAVE STATUS during # that gap. --sync_slave_with_master connection master; use test; connection slave; # Execute mysqldump with --dump-slave --replace_regex /MASTER_LOG_POS=[0-9]+/MASTER_LOG_POS=BINLOG_START/ --exec $MYSQL_DUMP_SLAVE --compact --dump-slave test # Execute mysqldump with --dump-slave and --apply-slave-statements --replace_regex /MASTER_LOG_POS=[0-9]+/MASTER_LOG_POS=BINLOG_START/ --exec $MYSQL_DUMP_SLAVE --compact --dump-slave --apply-slave-statements test --replace_regex /MASTER_LOG_POS=[0-9]+/MASTER_LOG_POS=BINLOG_START/ --replace_result $MASTER_MYPORT MASTER_MYPORT # Execute mysqldump with --dump-slave ,--apply-slave-statements and --include-master-host-port --exec $MYSQL_DUMP_SLAVE --compact --dump-slave --apply-slave-statements --include-master-host-port test # # MDEV-5624 mysqldump --dump-slave option does not restart the replication if the dump has failed # start slave; --replace_regex /MASTER_LOG_POS=[0-9]+/MASTER_LOG_POS=BINLOG_START/ --error 2 --exec $MYSQL_DUMP_SLAVE --compact --dump-slave no_such_db start slave; --echo *** Test mysqldump --dump-slave GTID functionality. --connection master SET gtid_seq_no = 1000; CREATE TABLE t1 (a INT PRIMARY KEY); DROP TABLE t1; --sync_slave_with_master --connection slave # Inject a local transaction on the slave to check that this is not considered # for --dump-slave. CREATE TABLE t2 (a INT PRIMARY KEY); DROP TABLE t2; --echo --echo 1. --dump-slave=1 --echo --replace_regex /MASTER_LOG_POS=[0-9]+/MASTER_LOG_POS=BINLOG_START/ --exec $MYSQL_DUMP_SLAVE --compact --dump-slave=1 --gtid test --echo --echo 2. --dump-slave=2 --echo --replace_regex /MASTER_LOG_POS=[0-9]+/MASTER_LOG_POS=BINLOG_START/ --exec $MYSQL_DUMP_SLAVE --compact --dump-slave=2 --gtid test --echo *** Test mysqldump --master-data GTID functionality. --echo --echo 1. --master-data=1 --echo --replace_regex /MASTER_LOG_POS=[0-9]+/MASTER_LOG_POS=BINLOG_START/ --exec $MYSQL_DUMP_SLAVE --compact --master-data=1 --gtid test --echo --echo 2. --master-data=2 --echo --replace_regex /MASTER_LOG_POS=[0-9]+/MASTER_LOG_POS=BINLOG_START/ --exec $MYSQL_DUMP_SLAVE --compact --master-data=2 --gtid test --echo --echo 3. --master-data --single-transaction --echo --replace_regex /MASTER_LOG_POS=[0-9]+/MASTER_LOG_POS=BINLOG_START/ --exec $MYSQL_DUMP_SLAVE --compact --master-data --single-transaction --gtid test # # MDEV-32611 Added test for mysqldump --delete-master-logs option. # This options is alias of # get binlogs: show master status -> flush logs -> purge binary logs to # sequence and this test is derived using the same pattern. # connection master; CREATE TABLE t ( id int ); insert into t values (1); insert into t values (2); drop table t; --sync_slave_with_master # MDEV-32953: Because --delete-master-logs immediately purges logs after # flushing, it is possible the binlog dump threads will still be using the old # log when the purge executes, disallowing the file from being deleted. # Therefore, we temporarily stop the slave so there is no chance the old binlog # is still being referenced. master_use_gtid=Slave_pos is necessary to still # appear up-to-date to the master on restart after the master has flushed the # logs (while the slave is offline). Otherwise (i.e. if using binlog file/pos), # the slave would point to a purged log file, and receive an error immediately # upon connecting to the master. --source include/stop_slave.inc change master to master_use_gtid=slave_pos; connection master; --echo # Ensuring the binlog dump thread is killed on primary... --disable_query_log --let $binlog_dump_thd_tid= `SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND LIKE 'Binlog Dump'` if ($binlog_dump_thd_tid) { --eval kill $binlog_dump_thd_tid } --let $wait_condition= SELECT COUNT(*)=0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND LIKE 'Binlog Dump' --source include/wait_condition.inc --enable_query_log --let $predump_binlog_filename= query_get_value(SHOW MASTER STATUS, File, 1) # Execute mysqldump with delete-master-logs option --replace_regex /MASTER_LOG_POS=[0-9]+/MASTER_LOG_POS=BINLOG_START/ --exec $MYSQL_DUMP --compact --no-create-info --no-data --delete-master-logs test --let $postdump_binlog_filename= query_get_value(SHOW MASTER STATUS, File, 1) --let $postdump_first_binary_log_filename= query_get_value(SHOW BINARY LOGS, Log_name, 1) if ($predump_binlog_filename == $postdump_binlog_filename) { --echo # predump_binlog_filename: $predump_binlog_filename --echo # postdump_binlog_filename: $postdump_binlog_filename --die Master state didn't change after mariadb-dump with --delete-master-logs. } if ($postdump_first_binary_log_filename != $postdump_binlog_filename) { --echo # postdump_first_binary_log_filename: $postdump_first_binary_log_filename --echo # postdump_binlog_filename: $postdump_binlog_filename --die Master binlog wasn't deleted after mariadb-dump with --delete-master-logs. } connection slave; --source include/start_slave.inc --source include/rpl_end.inc