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;
2003-05-15 18:35:39 +02:00
|
|
|
stop slave;
|
|
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
|
|
reset master;
|
|
|
|
reset slave;
|
|
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
|
|
start slave;
|
|
|
|
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);
|
|
|
|
insert into t4 select * from t3;
|
|
|
|
rename table t1 to t5, t2 to t1;
|
|
|
|
flush no_write_to_binlog tables;
|
|
|
|
show binlog events;
|
|
|
|
Log_name Pos Event_type Server_id Orig_log_pos Info
|
2003-05-21 20:39:58 +02:00
|
|
|
master-bin.000001 4 Start 1 4 Server ver: SERVER_VERSION, Binlog ver: 3
|
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;
2003-05-15 18:35:39 +02:00
|
|
|
master-bin.000001 79 Query 1 79 use `test`; create table t1 (a int)
|
|
|
|
master-bin.000001 137 Query 1 137 use `test`; insert into t1 values (10)
|
|
|
|
master-bin.000001 198 Query 1 198 use `test`; create table t2 (a int)
|
|
|
|
master-bin.000001 256 Query 1 256 use `test`; create table t3 (a int) type=merge union(t1)
|
|
|
|
master-bin.000001 335 Query 1 335 use `test`; create table t4 (a int)
|
|
|
|
master-bin.000001 393 Query 1 393 use `test`; insert into t4 select * from t3
|
|
|
|
master-bin.000001 459 Query 1 459 use `test`; rename table t1 to t5, t2 to t1
|
|
|
|
select * from t3;
|
|
|
|
a
|
|
|
|
flush tables;
|
|
|
|
show binlog events;
|
|
|
|
Log_name Pos Event_type Server_id Orig_log_pos Info
|
2003-05-21 20:39:58 +02:00
|
|
|
master-bin.000001 4 Start 1 4 Server ver: SERVER_VERSION, Binlog ver: 3
|
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;
2003-05-15 18:35:39 +02:00
|
|
|
master-bin.000001 79 Query 1 79 use `test`; create table t1 (a int)
|
|
|
|
master-bin.000001 137 Query 1 137 use `test`; insert into t1 values (10)
|
|
|
|
master-bin.000001 198 Query 1 198 use `test`; create table t2 (a int)
|
|
|
|
master-bin.000001 256 Query 1 256 use `test`; create table t3 (a int) type=merge union(t1)
|
|
|
|
master-bin.000001 335 Query 1 335 use `test`; create table t4 (a int)
|
|
|
|
master-bin.000001 393 Query 1 393 use `test`; insert into t4 select * from t3
|
|
|
|
master-bin.000001 459 Query 1 459 use `test`; rename table t1 to t5, t2 to t1
|
|
|
|
master-bin.000001 525 Query 1 525 use `test`; flush tables
|
|
|
|
select * from t3;
|
|
|
|
a
|