summaryrefslogtreecommitdiff
path: root/mysql-test/t/rpl_flush_tables.test
diff options
context:
space:
mode:
authorunknown <guilhem@mysql.com>2003-05-15 18:35:39 +0200
committerunknown <guilhem@mysql.com>2003-05-15 18:35:39 +0200
commite8336c8a197c519a1b035d796636523af7314663 (patch)
tree67d58f120ff62e57e109c20e887b75ad2ce0c104 /mysql-test/t/rpl_flush_tables.test
parent5d26a94f92db6f83823f4f5d8719ef025f109096 (diff)
downloadmariadb-git-e8336c8a197c519a1b035d796636523af7314663.tar.gz
Scrum task 845. Thi is a behaviour change :
now by default, FLUSH, OPTIMIZE, ANALYZE, REPAIR commands are written to the binlog, unless the new NO_WRITE_TO_BINLOG keyword was used : OPTIMIZE NO_WRITE_TO_BINLOG table t; Previously these commands were never written to the binlog, but there are 2 reasons to change this : - the RENAME TABLE in MERGE table bug (#175) on slave - the possible "differently optimised queries may lead to different updates on the master and slave" bug, until we have automatic ORDER BY. FLUSH LOGS/SLAVE/MASTER/TABLES WITH READ LOCK are never written to the binlog. New test for the new logging behaviour. Other small change : reload_acl_and_cache() and reset_slave() don't send their errors themselves, this is more usual. mysql-test/mysql-test-run.sh: rpl_flush_tables.test generates 'table xx is open on rename'. This is normal and done on purpose, so don't report it. sql/lex.h: New keyword NO_WRITE_TO_BINLOG sql/mysql_priv.h: reload_acl_and_cache() now decides if we want to write the FLUSH command to the binlog or not (FLUSH MASTER, FLUSH SLAVE, FLUSH TABLES WITH READ LOCK, FLUSH LOGS cannot go into the binlog). sql/mysqld.cc: updated for new prototype of reload_acl_and_cache(). sql/sql_lex.h: New boolean no_write_to_binlog in the lex structure. sql/sql_parse.cc: reload_acl_and_cache() now does not send its errors itself; it saves the error and the caller sends it. FLUSH, OPTIMIZE, ANALYZE, REPAIR commands don't write to the binlog if the NO_WRITE_TO_BINLOG keyword was used. sql/sql_repl.cc: reset_slave() does not send its errors himself. sql/sql_yacc.yy: New optional keyword NO_WRITE_TO_BINLOG for OPTIMIZE/ANALYZE/REPAIR/FLUSH : OPTIMIZE NO_WRITE_TO_BINLOG TABLE t; ANALYZE NO_WRITE_TO_BINLOG TABLE t; REPAIR NO_WRITE_TO_BINLOG TABLE t; FLUSH NO_WRITE_TO_BINLOG TABLE t;
Diffstat (limited to 'mysql-test/t/rpl_flush_tables.test')
-rw-r--r--mysql-test/t/rpl_flush_tables.test33
1 files changed, 33 insertions, 0 deletions
diff --git a/mysql-test/t/rpl_flush_tables.test b/mysql-test/t/rpl_flush_tables.test
new file mode 100644
index 00000000000..e62ba2e94c7
--- /dev/null
+++ b/mysql-test/t/rpl_flush_tables.test
@@ -0,0 +1,33 @@
+#
+# Test of replicating FLUSH TABLES to make
+# RENAME TABLE work with MERGE tables on the slave.
+# Test of FLUSH NO_WRITE_TO_BINLOG by the way.
+#
+source include/master-slave.inc;
+
+create table t1 (a int);
+insert into t1 values (10);
+create table t2 (a int);
+create table t3 (a int) type=merge union(t1);
+create table t4 (a int);
+# We force the slave to open t3 (because we want to try confusing him) with this :
+insert into t4 select * from t3;
+rename table t1 to t5, t2 to t1;
+# RENAME may have confused the master (this is a known bug): so FLUSH tables,
+# first don't write it to the binlog, to test the NO_WRITE_TO_BINLOG keyword.
+flush no_write_to_binlog tables;
+# Check that it's not in the binlog.
+show binlog events;
+# Check that the master is not confused.
+select * from t3;
+# This FLUSH should go into the binlog to not confuse the slave.
+flush tables;
+# Check that it's in the binlog.
+show binlog events;
+save_master_pos;
+connection slave;
+sync_with_master;
+# Check that the slave is not confused.
+select * from t3;
+# Note that all this confusion may cause warnings 'table xx is open on rename'
+# in the .err files; these are not fatal and are not reported by mysql-test-run.