1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

read-only slave using statement replication should replicate tmp tables

Relates to MDEV-17863 DROP TEMPORARY TABLE creates a transaction in
binary log on read only server

Other things:
- Fixed that insert into normal_table select from tmp_table is
  replicated as row events if tmp_table doesn't exists on slave.
This commit is contained in:
Michael Widenius
2019-10-21 17:17:09 +03:00
parent 7def2877e3
commit 06d2e1d828
8 changed files with 135 additions and 7 deletions

View File

@@ -0,0 +1,53 @@
include/master-slave.inc
[connection master]
#
# Ensure that read-only slave logs temporary table statements under statement based
# replication. This is related to MDEV-17863.
#
connection slave;
set global read_only=1;
connection master;
create table t1(a int) engine=MyISAM;
create temporary table tmp1 (a int) engine=MyISAM;
insert into t1 values(1);
insert into tmp1 values (2);
insert into t1 select * from tmp1;
insert into t1 values(3);
select * from t1;
a
1
2
3
analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
drop table t1;
drop temporary table tmp1;
connection slave;
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create table t1(a int) engine=MyISAM
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; create temporary table tmp1 (a int) engine=MyISAM
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; insert into t1 values(1)
slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; insert into tmp1 values (2)
slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; insert into t1 select * from tmp1
slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; insert into t1 values(3)
slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; analyze table t1
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `t1` /* generated by server */
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tmp1` /* generated by server */
set global read_only=0;
connection master;
include/rpl_end.inc

View File

@@ -0,0 +1,30 @@
--source include/have_binlog_format_statement.inc
--source include/master-slave.inc
--echo #
--echo # Ensure that read-only slave logs temporary table statements under statement based
--echo # replication. This is related to MDEV-17863.
--echo #
connection slave;
set global read_only=1;
connection master;
create table t1(a int) engine=MyISAM;
create temporary table tmp1 (a int) engine=MyISAM;
insert into t1 values(1);
insert into tmp1 values (2);
insert into t1 select * from tmp1;
insert into t1 values(3);
select * from t1;
analyze table t1;
drop table t1;
drop temporary table tmp1;
sync_slave_with_master;
--source include/show_binlog_events.inc
set global read_only=0;
connection master;
--source include/rpl_end.inc