Commit ada54101 authored by sachin's avatar sachin

MDEV-9266 Creating index on temporaray table breaks replication

Problem:- Create/drop index was logged into binlog.

Goal:- Operation on temporary table should not be binlog when binlog format
is row.

Solution:-
We should add CF_FORCE_ORIGINAL_BINLOG_FORMAT when there is ddl on temp
table.
For optimize, analyze, repair we wont change anything ,Then will
be logged in binlog , But they also dont throw any error if operation fails
Since slave wont be having any temp table , but these operation on tmp
table will be processed without breaking replication.

For rename we need a different logic MDEV-16728 will solve it.
parent e5c26fdf
# This file runs the query and checks
# whether the size of binlog is increased or not
# If size is changed it issue die command
# Parameters
# $sql_query = query to run
#Only last row of show binlog events matter
--let $tmp= 0
--let $counter= 1
while ($tmp != "No such row")
{
--let $initial_binlog_size= $tmp
--let $tmp= query_get_value(show binary logs, File_size, $counter)
--inc $counter
}
--eval $sql_query
--let $tmp= 0
--let $counter= 1
while ($tmp != "No such row")
{
--let $current_binlog_size= $tmp
--let $tmp= query_get_value(show binary logs, File_size, $counter)
--inc $counter
}
if ($initial_binlog_size != $current_binlog_size)
{
die "Binlog size changed";
}
RESET MASTER;
#Create table test
create temporary table t1(a int, b int);
#Add index test
create index index_a on t1(a);
#drop index test
drop index index_a on t1;
# ==== Purpose ====
#
# Test if statements used temporary tables are not binlogged in the case of
# binlog_format=row
#
# ==== Method ====
#
# We will see if binlog file size is increased or not, It should be constant for the
# entire period of test.
#
# ==== Related bugs ====
#
# Mdev-9266
#
source include/have_log_bin.inc;
source include/have_binlog_format_row.inc;
RESET MASTER;
--echo #Create table test
--let $sql_query= create temporary table t1(a int, b int)
--source suite/binlog/include/check_binlog_size.inc
--echo #Add index test
--let $sql_query= create index index_a on t1(a)
--source suite/binlog/include/check_binlog_size.inc
--echo #drop index test
--let $sql_query= drop index index_a on t1
--source suite/binlog/include/check_binlog_size.inc
......@@ -457,6 +457,9 @@ void init_update_queries(void)
sql_command_flags[SQLCOM_TRUNCATE]|= CF_FORCE_ORIGINAL_BINLOG_FORMAT;
/* We don't want to replicate DROP for temp tables in row format */
sql_command_flags[SQLCOM_DROP_TABLE]|= CF_FORCE_ORIGINAL_BINLOG_FORMAT;
/* We don't want to replicate CREATE/DROP INDEX for temp tables in row format */
sql_command_flags[SQLCOM_CREATE_INDEX]|= CF_FORCE_ORIGINAL_BINLOG_FORMAT;
sql_command_flags[SQLCOM_DROP_INDEX]|= CF_FORCE_ORIGINAL_BINLOG_FORMAT;
/* One can change replication mode with SET */
sql_command_flags[SQLCOM_SET_OPTION]|= CF_FORCE_ORIGINAL_BINLOG_FORMAT;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment