mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 05:52:27 +01:00
f62e89fade
A CREATE...SELECT that fails is written to the binary log if a non-transactional statement is updated. If the logging format is ROW, the CREATE statement and the changes are written to the binary log as distinct events and by consequence the created table is not rolled back in the slave. In this patch, we opted to let the slave goes out of sync by not writting to the binary log the CREATE statement. We do this by simply reseting the binary log's cache. mysql-test/suite/rpl/r/rpl_drop.result: Added a test case. mysql-test/suite/rpl/t/rpl_drop.test: Added a test case. sql/log.cc: Introduced a function to clean up the cache. sql/log.h: Introduced a function to clean up the cache. sql/sql_insert.cc: Cleaned up the binary log cache if a CREATE...SELECT fails.
67 lines
2 KiB
Text
67 lines
2 KiB
Text
# Testcase for BUG#4552 (DROP on two tables, one of which does not
|
|
# exist, must be binlogged with a non-zero error code)
|
|
source include/master-slave.inc;
|
|
source include/have_innodb.inc;
|
|
--disable_warnings
|
|
drop table if exists t1, t2;
|
|
--enable_warnings
|
|
create table t1 (a int);
|
|
--error 1051
|
|
drop table t1, t2;
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
# End of 4.1 tests
|
|
|
|
# BUG#55625 RBR breaks on failing 'CREATE TABLE'
|
|
# A CREATE...SELECT that fails is written to the binary log if a non-transactional
|
|
# statement is updated. If the logging format is ROW, the CREATE statement and the
|
|
# changes are written to the binary log as distinct events and by consequence the
|
|
# created table is not rolled back in the slave.
|
|
# To fix the problem, we do not write a CREATE...SELECT that fails to the binary
|
|
# log. Howerver, the changes to non-transactional tables are not replicated and
|
|
# thus the slave goes out of sync. This should be fixed after BUG#47899.
|
|
#
|
|
# In the test case, we verify if the binary log contains no information for a
|
|
# CREATE...SELECT that fails.
|
|
connection slave;
|
|
|
|
--source include/stop_slave.inc
|
|
SET @old_binlog_format= @@global.binlog_format;
|
|
SET GLOBAL binlog_format = ROW;
|
|
--source include/start_slave.inc
|
|
|
|
connection master;
|
|
SET @old_binlog_format= @@global.binlog_format;
|
|
SET binlog_format = ROW;
|
|
|
|
CREATE TABLE t2(a INT) ENGINE=MYISAM;
|
|
CREATE TABLE t3(a INT) ENGINE=INNODB;
|
|
|
|
delimiter |;
|
|
CREATE FUNCTION f1() RETURNS INT
|
|
BEGIN
|
|
insert into t2 values(1);
|
|
insert into t3 values(1);
|
|
return 1;
|
|
END|
|
|
delimiter ;|
|
|
|
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
|
let $binlog_file= query_get_value("SHOW MASTER STATUS", File, 1);
|
|
|
|
--error 1062
|
|
CREATE TABLE t1(UNIQUE(a)) ENGINE=MYISAM SELECT 1 AS a UNION ALL SELECT f1();
|
|
--error 1062
|
|
CREATE TABLE t1(UNIQUE(a)) ENGINE=INNODB SELECT 1 AS a UNION ALL SELECT f1();
|
|
|
|
--source include/show_binlog_events.inc
|
|
|
|
DROP FUNCTION f1;
|
|
DROP TABLE t2, t3;
|
|
SET @@global.binlog_format= @old_binlog_format;
|
|
|
|
--sync_slave_with_master
|
|
SET @@global.binlog_format= @old_binlog_format;
|
|
|
|
# End of 5.1 tests
|