mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 05:52:27 +01:00
bcb3170c97
With statement- or mixed-mode logging, "LOAD DATA INFILE" queries are written to the binlog using special types of log events. When mysqlbinlog reads such events, it re-creates the file in a temporary directory with a generated filename and outputs a "LOAD DATA INFILE" query where the filename is replaced by the generated file. The temporary file is not deleted by mysqlbinlog after termination. To fix the problem, in mixed mode we go to row-based. In SBR, we document it to remind user the tmpfile is left in a temporary directory. mysql-test/extra/rpl_tests/rpl_loaddata.test: Updated for Bug#34283 mysql-test/suite/binlog/r/binlog_mixed_load_data.result: Test result for BUG#34283. mysql-test/suite/binlog/t/binlog_killed_simulate.test: Updated for Bug#34283 mysql-test/suite/binlog/t/binlog_mixed_load_data.test: Added the test file to verify that 'load data infile...' statement will go to row-based in mixed mode. mysql-test/suite/binlog/t/binlog_stm_blackhole.test: Updated for Bug#34283 mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result: Updated for Bug#34283 mysql-test/suite/rpl/t/rpl_loaddata_fatal.test: Updated for Bug#34283 mysql-test/suite/rpl/t/rpl_loaddata_map.test: Updated for Bug#34283 mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test: Updated for Bug#34283 mysql-test/suite/rpl/t/rpl_stm_log.test: Updated for Bug#34283 sql/sql_load.cc: Added code to go to row-based in mixed mode for 'load data infile ...' statement
73 lines
1.8 KiB
Text
73 lines
1.8 KiB
Text
# ==== Purpose ====
|
|
#
|
|
# check replication of load data with the server parameters subjected to
|
|
# read_buffer_size > max_allowed_packet
|
|
#
|
|
# ==== Implementation ====
|
|
#
|
|
# Insert many rows into t1, write t1 to file.
|
|
# Load the file into t2.
|
|
# See that t2 came out as expected on slave.
|
|
#
|
|
# ==== Related Bugs ====
|
|
#
|
|
# BUG#30435 loading large LOAD DATA INFILE breaks slave with
|
|
# read_buffer_size set on master
|
|
# BUG#33413 show binlog events fails if binlog has event size of close
|
|
# to max_allowed_packet
|
|
|
|
source include/have_binlog_format_statement.inc;
|
|
source include/master-slave.inc;
|
|
|
|
|
|
--echo ==== Create a big file ====
|
|
|
|
# We turn off binlogging to avoid too much noise in the binlog. t1 is
|
|
# just an auxiliary construction anyways, it is not needed on the
|
|
# slave.
|
|
|
|
--disable_query_log
|
|
SET @@sql_log_bin= 0;
|
|
|
|
let $rows= 5000;
|
|
create table t1 (id int not null primary key auto_increment);
|
|
|
|
while($rows)
|
|
{
|
|
eval insert into t1 values (null);
|
|
dec $rows;
|
|
}
|
|
eval select * into outfile '$MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' from t1;
|
|
|
|
DROP TABLE t1;
|
|
SET @@sql_log_bin= 1;
|
|
--enable_query_log
|
|
|
|
|
|
--echo ==== Load our big file into a table ====
|
|
create table t2 (id int not null primary key auto_increment);
|
|
|
|
select @@session.read_buffer_size - @@session.max_allowed_packet > 0 ;
|
|
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
eval load data infile '$MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' into table t2;
|
|
select count(*) from t2 /* 5 000 */;
|
|
|
|
# the binlog will show fragmented Append_block events
|
|
source include/show_binlog_events.inc;
|
|
|
|
|
|
--echo ==== Verify results on slave ====
|
|
|
|
--echo [on slave]
|
|
sync_slave_with_master;
|
|
select count(*) from t2 /* 5 000 */;
|
|
|
|
|
|
--echo ==== Clean up ====
|
|
|
|
--echo [on master]
|
|
connection master;
|
|
drop table t2;
|
|
sync_slave_with_master;
|
|
remove_file $MYSQLTEST_VARDIR/tmp/bug30435_5k.txt;
|