mariadb/mysql-test/suite/rpl/r/mdev_24667.result
Sachin Kumar 9f4ba624e2 MDEV-24667 LOAD DATA INFILE on temporary table not written to slave binlog
Problem: In regular replication, when master binlogged using statement format
slave might not have written an event to its binary log when the Query
event aimed at a temporary table.
Specifically this was observed with LOAD DATA INFILE.

This effect was possible because unlike master slave holds temporary
tables in its pool and the master side check of existence of a
temporary table at the format bin-logging decision did not apply.

Solution: replace THD::has_thd_temporary_tables() with
THD::has_temporary_tables which allows to identify temporary table
presence on either side.

--
Reviewed by Andrei Elkin.
2022-03-25 10:49:48 +02:00

30 lines
994 B
Text

include/rpl_init.inc [topology=1->2->3]
call mtr.add_suppression('Unsafe statement written to the binary log using ');
connection server_1;
set binlog_format=statement;
#first bug
create table t1 (a int);
create temporary table tmp like t1;
load data local infile 'MYSQLTEST_VARDIR/load_data' INTO TABLE tmp;
insert into t1 select * from tmp;
#second bug
create table t2 (a int);
create temporary table tmp2 like t2;
insert into tmp2 values(10);
update tmp2 set a = 20 limit 1;
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted
insert into t2 select * from tmp2;
connection server_2;
connection server_3;
#t1 should have 2 rows
select count(*) = 2 from t1;
count(*) = 2
1
#t2 should have 1 rows with a = 20
select * from t2;
a
20
connection server_1;
drop table t1, t2, tmp, tmp2;
include/rpl_end.inc