1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
# === Purpose ===
# Check PURGE BINARY LOGS operation is mutually exclusive with BACKUP lock.
#
# === Requirements ===
# R1. PURGE BINARY LOGS must be mutually exclusive with BACKUP operation.
#
# === Implementation ===
# 1. Lock replica for backup
# 2. Flush binary logs so relay log is tried to be pureged
# 3. Check that relay logs have not been purged
# 4. Unblock backup on replica
# 5. Generate log purge from source onto replica
# 6. Check relay logs have been purged on replica
#
# === References ===
# Bug#35342521 Binary log purge should hold IX backup lock
#
--source include/have_debug.inc
--source include/have_debug_sync.inc
--source include/have_binlog_format_row.inc
--source include/master-slave.inc
--echo #
--echo # Lock replica for backup
--echo #
--source include/rpl_connection_slave.inc
--let $MYSQLD_SLAVE_DATADIR = `select @@datadir`
--source include/save_error_log_position.inc
LOCK INSTANCE FOR BACKUP;
--echo #
--echo # Flush binary logs so relay log is tried to be purged
--echo #
--source include/rpl_connection_master.inc
FLUSH BINARY LOGS;
--echo #
--echo # Check that relay logs have not been purged on replica
--echo #
--source include/sync_slave_sql_with_master.inc
--replace_regex /[\\]/\//
--cat_file $MYSQLD_SLAVE_DATADIR/slave-relay-bin.index
let $error_pattern =
Could not purge binary logs since another session is executing LOCK INSTANCE FOR BACKUP. Wait for that session to release the lock.
Could not purge binary logs since another session is executing LOCK INSTANCE FOR BACKUP. Wait for that session to release the lock.;
--source include/assert_error_log.inc
--echo #
--echo # Unblock backup on replica
--echo #
--source include/save_error_log_position.inc
UNLOCK INSTANCE;
--echo #
--echo # Generate log purge from source onto replica
--echo #
--source include/rpl_connection_master.inc
FLUSH BINARY LOGS;
--echo #
--echo # Check relay logs have been purged on replica
--echo #
--source include/sync_slave_sql_with_master.inc
--replace_regex /[\\]/\//
--cat_file $MYSQLD_SLAVE_DATADIR/slave-relay-bin.index
--let $error_pattern = NONE
--source include/assert_error_log.inc
call mtr.add_suppression("Could not purge binary logs since another session is executing LOCK INSTANCE FOR BACKUP. Wait for that session to release the lock.");
--echo #
--echo # Cleanup
--echo #
--source include/rpl_connection_master.inc
--source include/rpl_end.inc
|