1# BUG#34582: FLUSH LOGS does not close and reopen the binlog index 2# file 3# 4# WHAT 5# ==== 6# 7# We want to test that FLUSH LOGS closes and reopens binlog index 8# file. 9# 10# HOW 11# === 12# 13# PREPARE: 14# 1. create some binlog events 15# 2. show index content, binlog events and binlog contents 16# for mysql-bin.000001 17# 3. copy the mysql-bin.000001 to mysql-bin-b34582.000001 18# 4. change the index file so that mysql-bin.000001 is replaced 19# with mysql-bin-b34582.000001 20# 5. FLUSH the logs so that new index is closed and reopened 21# 22# ASSERTIONS: 23# 1. index file contents shows mysql-bin-b34582.000001 and 24# mysql-bin.000002 25# 1. show binary logs shows current index entries 26# 2. binlog contents for mysql-bin-b34582.000001 are displayed 27# 3. Purge binlogs up to the latest one succeeds 28# 4. SHOW BINARY LOGS presents the latest one only after purging 29# 5. Purged binlogs files don't exist in the filesystem 30# 6. Not purged binlog file exists in the filesystem 31# 32# CLEAN UP: 33# 1. RESET MASTER 34# 35 36-- source include/have_log_bin.inc 37 38RESET MASTER; 39 40-- let $datadir= `SELECT @@datadir` 41-- let $index=$datadir/master-bin.index 42-- chmod 0644 $index 43 44# action: issue one command so that binlog gets some event 45CREATE TABLE t1 (a int); 46 47-- echo ### assertion: index file contains regular entries 48-- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 49-- eval SET @index=LOAD_FILE('$index') 50-- replace_regex /\.[\\\/]master/master/ 51SELECT @index; 52 53--echo ### assertion: show original binlogs 54-- source include/show_binary_logs.inc 55 56--echo ### assertion: binlog contents from regular entries 57-- source include/show_binlog_events.inc 58 59# action: copy binlogs to other names and change entries in index file 60-- copy_file $datadir/master-bin.000001 $datadir/master-bin-b34582.000001 61let INDEX_FILE=$index; 62perl; 63$file= $ENV{'INDEX_FILE'}; 64open(FILE, ">$file") || die "Unable to open $file."; 65truncate(FILE,0); 66close ($file); 67EOF 68 69-- append_file $index 70master-bin-b34582.000001 71EOF 72 73# action: should cause rotation, and creation of new binlogs 74FLUSH LOGS; 75 76# file is not used anymore - remove it (mysql closed on flush logs). 77-- remove_file $datadir/master-bin.000001 78 79-- echo ### assertion: index file contains renamed binlog and the new one 80-- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 81-- eval SET @index=LOAD_FILE('$index') 82-- replace_regex /\.[\\\/]master/master/ 83SELECT @index; 84 85-- echo ### assertion: original binlog content still exists, despite we 86-- echo ### renamed and changed the index file 87-- source include/show_binlog_events.inc 88 89-- echo ### assertion: user changed binlog index shows correct entries 90-- source include/show_binary_logs.inc 91 92DROP TABLE t1; 93 94-- echo ### assertion: purging binlogs up to binlog created after instrumenting index file should work 95-- let $current_binlog= query_get_value(SHOW MASTER STATUS, File, 1) 96-- eval PURGE BINARY LOGS TO '$current_binlog' 97 98-- echo ### assertion: show binary logs should only contain latest binlog 99-- source include/show_binary_logs.inc 100 101-- echo ### assertion: assert that binlog files were indeed purged (using file_exists calls) 102-- error 1 103-- file_exists $datadir/master-bin-b34852.000001 104 105-- echo ### assertion: assert that not purged binlog file exists 106-- file_exists $datadir/$current_binlog 107 108-- echo ### assertion: show index file contents and these should match show binary logs issued above 109-- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 110-- eval SET @index=LOAD_FILE('$index') 111-- replace_regex /\.[\\\/]master/master/ 112SELECT @index; 113 114RESET MASTER; 115