• Sven Sandberg's avatar
    BUG#38178: rpl_loaddata_map fails sporadically in pushbuild · e5d1324d
    Sven Sandberg authored
    Problem: master binlog has 'create table t1'. Master binlog
    was removed before slave could replicate it. In test's cleanup
    code, master did 'drop table t1', which caused slave sql
    thread to stop with an error since slave sql thread did not
    know about t1.
    Fix: t1 is just an auxiliary construction, only needed on
    master. Hence, we turn off binlogging before t1 is created,
    drop t1 as soon as we don't need it anymore, and then turn
    on binlogging again.
    e5d1324d
rpl_loaddata_map.test 1.81 KB
# ==== 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_mixed_or_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;