mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
e7157aba3a
Fix for BUG#4971 "CREATE TABLE ... TYPE=HEAP SELECT ... stops slave (wrong DELETE in binlog)": replacing the no_log argument of mysql_create_table() by some safer method (temporarily setting OPTION_BIN_LOG to 0) which guarantees that even the automatic DELETE FROM heap_table does not get into the binlog when a not-yet-existing HEAP table is opened by mysql_create_table(). mysql-test/r/rpl_heap.result: result update mysql-test/t/rpl_heap.test: changing test to test a bug (but anyway, mysql-test-run --manager looks like not working in 4.1 currently, so this test is never run). sql/log.cc: new class Disable_binlog used to temporarily disable binlogging for one thread. sql/mysql_priv.h: removing argument no_log from mysql_create_table(); no_log was not perfect as some binlogging could still be done by open_unireg_entry() for a HEAP table. sql/sql_class.h: new class Disable_binlog used to temporarily disable binlogging for one thread. sql/sql_parse.cc: removing no_log arg from mysql_create_table() sql/sql_table.cc: removing no_log from mysql_create_table(); instead using new class Disable_binlog. Disabling binlogging in some cases, where the binlogging is done later by some other code (case of CREATE SELECT and ALTER).
49 lines
1.2 KiB
Text
49 lines
1.2 KiB
Text
# You must run this test with --manager.
|
|
|
|
require_manager;
|
|
|
|
# Don't know why, but using TCP/IP connections makes this test fail
|
|
# with "Lost connection to MySQL server during query" when we
|
|
# issue a query after the server restart.
|
|
# Maybe this is something awkward in mysqltest or in the manager?
|
|
# So we use sockets.
|
|
connect (master,localhost,root,,test,0,master.sock);
|
|
connect (slave,localhost,root,,test,0,slave.sock);
|
|
|
|
connection master;
|
|
reset master;
|
|
drop table if exists t1;
|
|
# we use CREATE SELECT to verify that DELETE does not get into binlog
|
|
# before CREATE SELECT
|
|
create table t1 type=HEAP select 10 as a;
|
|
insert into t1 values(11);
|
|
save_master_pos;
|
|
show binlog events from 79;
|
|
connection slave;
|
|
reset slave;
|
|
start slave;
|
|
sync_with_master;
|
|
show create table t1;
|
|
select * from t1; # should be one row
|
|
|
|
server_stop master;
|
|
server_start master;
|
|
|
|
connection master;
|
|
select * from t1;
|
|
# to check that DELETE is not written twice
|
|
# (the LIMIT is to not use the query cache)
|
|
select * from t1 limit 10;
|
|
save_master_pos;
|
|
show binlog events in 'master-bin.002' from 79;
|
|
|
|
connection slave;
|
|
sync_with_master;
|
|
select * from t1; # should be empty
|
|
|
|
# clean up
|
|
connection master;
|
|
drop table t1;
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|