# ==== Purpose ==== # # Test verifies truncation of multiple binary logs. # # ==== References ==== # MDEV-21117: recovery for --rpl-semi-sync-slave-enabled server --source include/have_innodb.inc --source include/have_debug_sync.inc --source include/have_binlog_format_row.inc call mtr.add_suppression("Can.t init tc log"); call mtr.add_suppression("Aborting"); SET @@global.max_binlog_size= 4096; SET @@global.sync_binlog= 1; RESET MASTER; FLUSH LOGS; CREATE TABLE ti (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Innodb; CREATE TABLE tm (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=MyISAM; connect(master1,localhost,root,,); --echo "List of binary logs before rotation" --source include/show_binary_logs.inc # Some load to either non- and transactional egines # that should not affect the following recovery: INSERT INTO ti VALUES(1,"I am gonna survive"); INSERT INTO tm VALUES(1,"me too!"); # hold on near engine commit SET DEBUG_SYNC= "commit_after_release_LOCK_after_binlog_sync SIGNAL master1_ready WAIT_FOR master1_go_never_arrives"; --send INSERT INTO ti VALUES (2, REPEAT("x", 4100)) connect(master2,localhost,root,,); # The 2nd trx for recovery, it does not rotate binlog SET DEBUG_SYNC= "now WAIT_FOR master1_ready"; SET DEBUG_SYNC= "commit_before_get_LOCK_commit_ordered SIGNAL master2_ready WAIT_FOR master2_go_never_arrives"; --send INSERT INTO ti VALUES (3, "not gonna survive") --connection default SET DEBUG_SYNC= "now WAIT_FOR master2_ready"; connect(master3,localhost,root,,); # The 3nd trx for recovery, it won't get into binlog nor therefore recover SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL master3_ready WAIT_FOR master3_go_never_arrives"; --send INSERT INTO ti VALUES (4, "not gonna be log therefore survive"),(5, "ditto") --connection default SET DEBUG_SYNC= "now WAIT_FOR master3_ready"; --echo "List of binary logs before crash" --source include/show_binary_logs.inc --echo # The gtid binlog state prior the crash will be truncated at the end of the test SELECT @@global.gtid_binlog_state; --connection default --source include/kill_mysqld.inc --disconnect master1 --disconnect master2 --disconnect master3 # # Server restart # --let $restart_parameters= --rpl-semi-sync-slave-enabled=1 --sync-binlog=1 --log-warnings=3 --source include/start_mysqld.inc # Check error log for a successful truncate message. let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.1.err; --let SEARCH_FILE=$log_error_ --let SEARCH_PATTERN=truncated binlog file:.*master.*000002 --source include/search_pattern_in_file.inc --echo "One record should be present in table" SELECT * FROM ti; --echo # The truncated gtid binlog state SELECT @@global.gtid_binlog_state; SELECT @@global.gtid_binlog_pos; --echo # Cleanup DROP TABLE ti; SET @@global.sync_binlog= default; --echo # End of the tests