mirror of
https://github.com/MariaDB/server.git
synced 2025-05-05 16:59:35 +03:00
This saves one byte per Query_log_event on disk compared to 5.0.[0..3]. Compatibility problems with 5.0.x where x<4 are explained in the comments in log_event.cc. Putting back s/my_open(O_TRUNC)/(my_delete+my_create) change which had been wiped away by somebody doing a wrong 4.1->5.0 merge (which happened just before 5.0.3 :( ). Applying it to new events for LOAD DATA INFILE. If slave fails in Execute_load_query_log_event::exec_event(), don't delete the file (so that it's re-usable at next START SLAVE). And (youpi!) fix for BUG#3247 "a partially completed LOAD DATA INFILE is not executed at all on the slave" (storing an Execute_load_query_log_event to binlog, with its error code, instead of Delete_file_log_event). mysql-test/r/mix_innodb_myisam_binlog.result: we now use one less byte when storing the catalog in binlog so positions change mysql-test/r/rpl_change_master.result: we now use one less byte when storing the catalog in binlog so positions change mysql-test/r/rpl_deadlock.result: we now use one less byte when storing the catalog in binlog so positions change mysql-test/r/rpl_error_ignored_table.result: we now use one less byte when storing the catalog in binlog so positions change mysql-test/r/rpl_flush_log_loop.result: we now use one less byte when storing the catalog in binlog so positions change mysql-test/r/rpl_loaddata.result: we now use one less byte when storing the catalog in binlog so positions change. Plus testing replication of LOAD DATA INFILE if duplicate key and non-transactional table. mysql-test/r/rpl_log.result: we now use one less byte when storing the catalog in binlog so positions change mysql-test/r/rpl_max_relay_size.result: we now use one less byte when storing the catalog in binlog so positions change mysql-test/r/rpl_relayrotate.result: we now use one less byte when storing the catalog in binlog so positions change mysql-test/r/rpl_replicate_do.result: we now use one less byte when storing the catalog in binlog so positions change mysql-test/r/rpl_rotate_logs.result: we now use one less byte when storing the catalog in binlog so positions change mysql-test/r/rpl_until.result: we now use one less byte when storing the catalog in binlog so positions change mysql-test/t/mysqlbinlog.test: we now use one less byte when storing the catalog in binlog so positions change mysql-test/t/mysqlbinlog2.test: we now use one less byte when storing the catalog in binlog so positions change mysql-test/t/rpl_deadlock.test: we now use one less byte when storing the catalog in binlog so positions change mysql-test/t/rpl_loaddata.test: we now use one less byte when storing the catalog in binlog so positions change. Plus testing replication of LOAD DATA INFILE if duplicate key and non-transactional table. mysql-test/t/rpl_until.test: we now use one less byte when storing the catalog in binlog so positions change sql/log_event.cc: a) We now store the catalog in Query_log_event in binlog WITHOUT its end zero. This saves one byte per Query_log_event on disk. Compatibility problems with 5.0.x where x<4 are explained in the comments in this file. b) putting back s/my_open(O_TRUNC)/(my_delete+my_create) change which had been wiped away by somebody doing a wrong 4.1->5.0 merge (which happened just before 5.0.3 :( ). Applying it to new events for LOAD DATA INFILE. c) if slave fails in Execute_load_query_log_event::exec_event(), don't delete the file (so that it's re-usable at next START SLAVE). sql/log_event.h: We now store the catalog in Query_log_event in binlog WITHOUT its end zero. This saves one byte per Query_log_event on disk. This new storage for the catalog is denoted by Q_CATALOG_NZ_CODE (couldn't re-use Q_CATALOG_CODE as 5.0.3 slaves of this 5.0.4 master would segfault because it would expect a 0 when there is none. Renaming get_open_mode() to get_create_or_append() (see log_event.cc) sql/sql_load.cc: Fix for BUG#3247: if LOAD DATA INFILE fails but has permanently updated a table (i.e. has deleted/added/modified some rows in a non-transactional table), we must write an Execute_load_query_log_event to binlog (with the error code, as this class beautifully inherits from Query_log_event, it can store the error code - thanks Dmitri) and not a Delete_file_log_event (we use to write a Delete_file_log_event: no update happened on slave, bug).
110 lines
4.0 KiB
Plaintext
110 lines
4.0 KiB
Plaintext
# We are using .opt file since we need small binlog size
|
|
|
|
# we need this for getting fixed timestamps inside of this test
|
|
set timestamp=1000000000;
|
|
|
|
--disable_warnings
|
|
drop table if exists t1,t2;
|
|
--enable_warnings
|
|
|
|
create table t1 (word varchar(20));
|
|
create table t2 (id int auto_increment not null primary key);
|
|
|
|
# simple test for simple statement and various events
|
|
insert into t1 values ("abirvalg");
|
|
insert into t2 values ();
|
|
# Should be uncommented in 4.1
|
|
# set @a:=1
|
|
# insert into t2 values (@a);
|
|
|
|
# test for load data and load data distributed among the several
|
|
# files (we need to fill up first binlog)
|
|
load data infile '../../std_data/words.dat' into table t1;
|
|
load data infile '../../std_data/words.dat' into table t1;
|
|
load data infile '../../std_data/words.dat' into table t1;
|
|
load data infile '../../std_data/words.dat' into table t1;
|
|
load data infile '../../std_data/words.dat' into table t1;
|
|
# simple query to show more in second binlog
|
|
insert into t1 values ("Alas");
|
|
flush logs;
|
|
|
|
# delimiters are for easier debugging in future
|
|
--disable_query_log
|
|
select "--- Local --" as "";
|
|
--enable_query_log
|
|
|
|
#
|
|
# We should use --short-form everywhere because in other case output will
|
|
# be time dependend. Better than nothing.
|
|
#
|
|
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQL_TEST_DIR/var/tmp/ $MYSQL_TEST_DIR/var/log/master-bin.000001
|
|
|
|
# this should not fail but shouldn't produce any working statements
|
|
--disable_query_log
|
|
select "--- Broken LOAD DATA --" as "";
|
|
--enable_query_log
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQL_TEST_DIR/var/tmp/ $MYSQL_TEST_DIR/var/log/master-bin.000002
|
|
|
|
# this should show almost nothing
|
|
--disable_query_log
|
|
select "--- --database --" as "";
|
|
--enable_query_log
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQL_TEST_DIR/var/tmp/ --database=nottest $MYSQL_TEST_DIR/var/log/master-bin.000001
|
|
|
|
# this test for position option
|
|
--disable_query_log
|
|
select "--- --position --" as "";
|
|
--enable_query_log
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQL_TEST_DIR/var/tmp/ --position=231 $MYSQL_TEST_DIR/var/log/master-bin.000002
|
|
|
|
# These are tests for remote binlog.
|
|
# They should return the same as previous test.
|
|
|
|
--disable_query_log
|
|
select "--- Remote --" as "";
|
|
--enable_query_log
|
|
|
|
# This is broken now
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQL_TEST_DIR/var/tmp/ --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001
|
|
|
|
# This is broken too
|
|
--disable_query_log
|
|
select "--- Broken LOAD DATA --" as "";
|
|
--enable_query_log
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQL_TEST_DIR/var/tmp/ --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000002
|
|
|
|
# And this too ! (altough it is documented)
|
|
--disable_query_log
|
|
select "--- --database --" as "";
|
|
--enable_query_log
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQL_TEST_DIR/var/tmp/ --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --database=nottest master-bin.000001
|
|
|
|
# Strangely but this works
|
|
--disable_query_log
|
|
select "--- --position --" as "";
|
|
--enable_query_log
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQL_TEST_DIR/var/tmp/ --read-from-remote-server --position=231 --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000002
|
|
|
|
# Bug#7853 (mysqlbinlog does not accept input from stdin)
|
|
--disable_query_log
|
|
select "--- reading stdin --" as "";
|
|
--enable_query_log
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
--exec cat $MYSQL_TEST_DIR/std_data/trunc_binlog.000001 | $MYSQL_BINLOG --short-form -
|
|
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
--exec cat $MYSQL_TEST_DIR/std_data/trunc_binlog.000001 | $MYSQL_BINLOG --short-form --position=79 -
|
|
|
|
# clean up
|
|
drop table t1, t2;
|
|
|