mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 14:02:32 +01:00
4dc7be62a9
Problem: When RAND() is binlogged in statement mode, the seed is binlogged too, so the replication slave generates the same sequence of random numbers. This makes replication work in many cases, but not in all cases: the order of rows is not guaranteed for, e.g., UPDATE or INSERT...SELECT statements, so the row data will be different if master and slave retrieve the rows in different orders. Fix: Mark RAND() as unsafe. It will generate a warning if binlog_format=STATEMENT and switch to row-logging if binlog_format=ROW. mysql-test/extra/rpl_tests/rpl_row_func003.test: updated test case to ignore new warnings mysql-test/suite/binlog/r/binlog_unsafe.result: updated result file mysql-test/suite/binlog/t/binlog_unsafe.test: Added test for RAND(). Also clarified some old comments. mysql-test/suite/rpl/r/rpl_misc_functions.result: updated result file mysql-test/suite/rpl/r/rpl_nondeterministic_functions.result: updated test case to ignore new warnings mysql-test/suite/rpl/r/rpl_optimize.result: updated result file mysql-test/suite/rpl/r/rpl_row_func003.result: updated result file mysql-test/suite/rpl/t/rpl_misc_functions.test: updated test case to ignore new warnings mysql-test/suite/rpl/t/rpl_nondeterministic_functions.test: updated test case to ignore new warnings mysql-test/suite/rpl/t/rpl_optimize.test: updated test case to ignore new warnings mysql-test/suite/rpl/t/rpl_trigger.test: updated test case to ignore new warnings mysql-test/suite/rpl_ndb/r/rpl_ndb_func003.result: updated result file sql/item_create.cc: Mark RAND() unsafe.
58 lines
1.9 KiB
Text
58 lines
1.9 KiB
Text
# Test for BUG#1858 "OPTIMIZE TABLE done by a client
|
|
# thread stops the slave SQL thread".
|
|
# You can replace OPTIMIZE by REPAIR.
|
|
#####################################
|
|
# Change Author: JBM
|
|
# Change Date: 2006-02-09
|
|
# Change: NDB does not and will not support
|
|
# OPTIMIZE for memory tables. If and when
|
|
# it does support for Disk Data, a new
|
|
# version of this test will be need.
|
|
# Skipping this test if default engine = ndb
|
|
#####################################
|
|
-- source include/not_ndb_default.inc
|
|
-- source include/master-slave.inc
|
|
|
|
CALL mtr.add_suppression('Statement may not be safe to log in statement format.');
|
|
|
|
create table t1 (a int not null auto_increment primary key, b int, key(b));
|
|
INSERT INTO t1 (a) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
INSERT INTO t1 (a) SELECT null FROM t1;
|
|
save_master_pos;
|
|
# a few updates to force OPTIMIZE to do something
|
|
--disable_warnings
|
|
update t1 set b=(a/2*rand());
|
|
delete from t1 order by b limit 10000;
|
|
--enable_warnings
|
|
|
|
connection slave;
|
|
sync_with_master;
|
|
optimize table t1;
|
|
connection master;
|
|
save_master_pos;
|
|
connection slave;
|
|
# Bug was that when the INSERT terminated on slave,
|
|
# the slave SQL thread got killed by OPTIMIZE.
|
|
sync_with_master; # won't work if slave SQL thread stopped
|
|
|
|
connection master; # cleanup
|
|
drop table t1;
|
|
connection slave;
|
|
sync_with_master;
|
|
|
|
# If the machine is so fast that slave syncs before OPTIMIZE
|
|
# starts, this test wil demonstrate nothing but will pass.
|
|
|
|
# End of 4.1 tests
|