mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Test for mysqlbinlog
Particularly for BUG#1340 mysqlbinlog coredumps when reading Exec event without seeing Create_file event before mysql-test/mysql-test-run.sh: Now mysqlbinlog will use proper temporary directory
This commit is contained in:
@ -434,9 +434,9 @@ if [ x$SOURCE_DIST = x1 ] ; then
|
||||
MYSQL_DUMP="$BASEDIR/client/mysqldump --no-defaults -uroot --socket=$MASTER_MYSOCK"
|
||||
fi
|
||||
if [ -f "$BASEDIR/client/.libs/mysqlbinlog" ] ; then
|
||||
MYSQL_BINLOG="$BASEDIR/client/.libs/mysqlbinlog"
|
||||
MYSQL_BINLOG="$BASEDIR/client/.libs/mysqlbinlog --local-load=$MYSQL_TMP_DIR"
|
||||
else
|
||||
MYSQL_BINLOG="$BASEDIR/client/mysqlbinlog"
|
||||
MYSQL_BINLOG="$BASEDIR/client/mysqlbinlog --local-load=$MYSQL_TMP_DIR"
|
||||
fi
|
||||
if [ -n "$STRACE_CLIENT" ]; then
|
||||
MYSQL_TEST="strace -o $MYSQL_TEST_DIR/var/log/mysqltest.strace $MYSQL_TEST"
|
||||
@ -460,7 +460,7 @@ else
|
||||
fi
|
||||
MYSQL_TEST="$BASEDIR/bin/mysqltest"
|
||||
MYSQL_DUMP="$BASEDIR/bin/mysqldump --no-defaults -uroot --socket=$MASTER_MYSOCK"
|
||||
MYSQL_BINLOG="$BASEDIR/bin/mysqlbinlog"
|
||||
MYSQL_BINLOG="$BASEDIR/bin/mysqlbinlog --local-load=$MYSQL_TMP_DIR"
|
||||
MYSQLADMIN="$BASEDIR/bin/mysqladmin"
|
||||
WAIT_PID="$BASEDIR/bin/mysql_waitpid"
|
||||
MYSQL_MANAGER="$BASEDIR/bin/mysqlmanager"
|
||||
|
84
mysql-test/r/mysqlbinlog.result
Normal file
84
mysql-test/r/mysqlbinlog.result
Normal file
@ -0,0 +1,84 @@
|
||||
drop table if exists t1;
|
||||
drop table if exists t2;
|
||||
set timestamp=1000000000;
|
||||
create table t1 (word varchar(20));
|
||||
create table t2 (id int auto_increment not null primary key);
|
||||
insert into t1 values ("abirvalg");
|
||||
insert into t2 values ();
|
||||
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;
|
||||
load data infile '../../std_data/words.dat' into table t1;
|
||||
insert into t1 values ("Alas");
|
||||
flush logs;
|
||||
|
||||
--- Local --
|
||||
use test;
|
||||
SET TIMESTAMP=1000000000;
|
||||
create table t1 (word varchar(20));
|
||||
SET TIMESTAMP=1000000000;
|
||||
create table t2 (id int auto_increment not null primary key);
|
||||
SET TIMESTAMP=1000000000;
|
||||
insert into t1 values ("abirvalg");
|
||||
SET INSERT_ID=1;
|
||||
SET TIMESTAMP=1000000000;
|
||||
insert into t2 values ();
|
||||
LOAD DATA LOCAL INFILE '/home/dlenev/src/mysql-4.0-binlog/mysql-test/var/tmp/words.dat-1-0 ' INTO TABLE t1 FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY '' (word);
|
||||
LOAD DATA LOCAL INFILE '/home/dlenev/src/mysql-4.0-binlog/mysql-test/var/tmp/words.dat-2-0 ' INTO TABLE t1 FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY '' (word);
|
||||
LOAD DATA LOCAL INFILE '/home/dlenev/src/mysql-4.0-binlog/mysql-test/var/tmp/words.dat-3-0 ' INTO TABLE t1 FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY '' (word);
|
||||
LOAD DATA LOCAL INFILE '/home/dlenev/src/mysql-4.0-binlog/mysql-test/var/tmp/words.dat-4-0 ' INTO TABLE t1 FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY '' (word);
|
||||
LOAD DATA LOCAL INFILE '/home/dlenev/src/mysql-4.0-binlog/mysql-test/var/tmp/words.dat-5-0 ' INTO TABLE t1 FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY '' (word);
|
||||
|
||||
--- Broken LOAD DATA --
|
||||
use test;
|
||||
SET TIMESTAMP=1000000000;
|
||||
insert into t1 values ("Alas");
|
||||
|
||||
--- --database --
|
||||
SET INSERT_ID=1;
|
||||
|
||||
--- --position --
|
||||
use test;
|
||||
SET TIMESTAMP=1000000000;
|
||||
insert into t1 values ("Alas");
|
||||
|
||||
--- Remote --
|
||||
use test;
|
||||
SET TIMESTAMP=1000000000;
|
||||
create table t1 (word varchar(20));
|
||||
SET TIMESTAMP=1000000000;
|
||||
create table t2 (id int auto_increment not null primary key);
|
||||
SET TIMESTAMP=1000000000;
|
||||
insert into t1 values ("abirvalg");
|
||||
SET INSERT_ID=1;
|
||||
SET TIMESTAMP=1000000000;
|
||||
insert into t2 values ();
|
||||
SET TIMESTAMP=1000000000;
|
||||
insert into t1 values ("Alas");
|
||||
|
||||
--- Broken LOAD DATA --
|
||||
use test;
|
||||
SET TIMESTAMP=1000000000;
|
||||
insert into t1 values ("Alas");
|
||||
|
||||
--- --database --
|
||||
use test;
|
||||
SET TIMESTAMP=1000000000;
|
||||
create table t1 (word varchar(20));
|
||||
SET TIMESTAMP=1000000000;
|
||||
create table t2 (id int auto_increment not null primary key);
|
||||
SET TIMESTAMP=1000000000;
|
||||
insert into t1 values ("abirvalg");
|
||||
SET INSERT_ID=1;
|
||||
SET TIMESTAMP=1000000000;
|
||||
insert into t2 values ();
|
||||
SET TIMESTAMP=1000000000;
|
||||
insert into t1 values ("Alas");
|
||||
|
||||
--- --position --
|
||||
use test;
|
||||
SET TIMESTAMP=1000000000;
|
||||
insert into t1 values ("Alas");
|
||||
drop table t1;
|
1
mysql-test/t/mysqlbinlog-master.opt
Normal file
1
mysql-test/t/mysqlbinlog-master.opt
Normal file
@ -0,0 +1 @@
|
||||
--max-binlog-size=4096
|
95
mysql-test/t/mysqlbinlog.test
Normal file
95
mysql-test/t/mysqlbinlog.test
Normal file
@ -0,0 +1,95 @@
|
||||
# We are using .opt file since we need small binlog size
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
drop table if exists t2;
|
||||
--enable_warnings
|
||||
|
||||
# we need this for getting fixed timestamps inside of this test
|
||||
set timestamp=1000000000;
|
||||
|
||||
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;
|
||||
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.
|
||||
#
|
||||
|
||||
--exec $MYSQL_BINLOG --short-form $MYSQL_TEST_DIR/var/log/master-bin.001
|
||||
# this should not fail but shouldn't produce any working statements
|
||||
--disable_query_log
|
||||
select "--- Broken LOAD DATA --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form $MYSQL_TEST_DIR/var/log/master-bin.002
|
||||
|
||||
# this should show almost nothing
|
||||
--disable_query_log
|
||||
select "--- --database --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --database=nottest $MYSQL_TEST_DIR/var/log/master-bin.001
|
||||
|
||||
# this test for position option
|
||||
--disable_query_log
|
||||
select "--- --position --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --position=27 $MYSQL_TEST_DIR/var/log/master-bin.002
|
||||
|
||||
# These are tests for remote binlog.
|
||||
# They should return the same as previous test.
|
||||
# But now they are not. V. Vagin should fix this.
|
||||
# We test all the same options second time since code for remote case is
|
||||
# essentially different. If code for both cases will be unified we'll be
|
||||
# able to throw out most of this.
|
||||
|
||||
--disable_query_log
|
||||
select "--- Remote --" as "";
|
||||
--enable_query_log
|
||||
|
||||
# This is broken now
|
||||
# By the way it seems that remote version fetches all events with name >= master-bin.001
|
||||
--exec $MYSQL_BINLOG --short-form --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.001
|
||||
|
||||
# This is broken too
|
||||
--disable_query_log
|
||||
select "--- Broken LOAD DATA --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.002
|
||||
|
||||
# And this too ! (altough it is documented)
|
||||
--disable_query_log
|
||||
select "--- --database --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --database=nottest master-bin.001
|
||||
|
||||
# Strangely but this works
|
||||
--disable_query_log
|
||||
select "--- --position --" as "";
|
||||
--enable_query_log
|
||||
--exec $MYSQL_BINLOG --short-form --position=27 --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.002
|
||||
|
||||
# clean up
|
||||
drop table t1;
|
Reference in New Issue
Block a user