2005-12-22 06:39:02 +01:00
|
|
|
# Requires statement logging
|
2001-06-21 21:19:24 +02:00
|
|
|
|
2003-02-21 23:38:56 +01:00
|
|
|
# Clean up old slave's binlogs.
|
|
|
|
# The slave is started with --log-slave-updates
|
|
|
|
# and this test does SHOW BINLOG EVENTS on the slave's
|
|
|
|
# binlog. But previous tests can influence the current test's
|
|
|
|
# binlog (e.g. a temporary table in the previous test has not
|
|
|
|
# been explicitly deleted, and at the beginning of the current
|
|
|
|
# test the slave immediately writes DROP TEMPORARY TABLE this_old_table).
|
|
|
|
# We wait for the slave to have written all he wants to the binlog
|
|
|
|
# (otherwise RESET MASTER may come too early).
|
|
|
|
save_master_pos;
|
2001-06-21 21:19:24 +02:00
|
|
|
connection slave;
|
2003-02-21 23:38:56 +01:00
|
|
|
sync_with_master;
|
2002-10-25 01:46:14 +02:00
|
|
|
stop slave;
|
2001-06-21 21:19:24 +02:00
|
|
|
reset master;
|
2001-06-22 16:35:18 +02:00
|
|
|
reset slave;
|
Result updates after Dmitri's and my changes to logging with --log-slave-updates.
Since my changes, rpl_log.test, whose result file depends on file_id, became
non-repeatable, i.e. file_id on slave in SHOW BINLOG EVENTS
changed depending on the order of tests (sometimes 1, sometimes 5).
Which is logical: as now the slave does not copy Create_file and Exec_load from
the relay log (i.e from the master's binlog) to the slave's binlog, but
instead lets mysql_load() do the logging, the file_id is now the one whic
was used on the slave. Before it was the one which was used on the master,
and by chance the master was always restarted for this test because there's
a -master.opt file, so file_id on the master is always 1. But now file_id is
from the slave so we need to restart the slave. That's why I add an (empty)
-slave.opt file. I could have used 'server_stop/start slave', but this
would have required the manager, so most of the time mysql-test-run silently
skip the test which makes it useless. And I want this test to be run !
2003-08-21 00:23:39 +02:00
|
|
|
# We are going to read the slave's binlog which contains file_id (for some LOAD
|
|
|
|
# DATA INFILE); to make it repeatable (not influenced by other tests), we need
|
|
|
|
# to stop and start the slave, to be sure file_id will start from 1.
|
|
|
|
# This can be done with 'server_stop slave', but
|
|
|
|
# this would require the manager, so most of the time the test will be skipped
|
|
|
|
# :(
|
|
|
|
# To workaround this, I (Guilhem) add a (empty) rpl_log-slave.opt (because when
|
|
|
|
# mysql-test-run finds such a file it restarts the slave before doing the
|
|
|
|
# test). That's not very elegant but I could find no better way, sorry.
|
|
|
|
|
2001-12-15 03:41:20 +01:00
|
|
|
let $VERSION=`select version()`;
|
2001-06-21 21:19:24 +02:00
|
|
|
|
|
|
|
connection master;
|
2001-06-22 16:35:18 +02:00
|
|
|
reset master;
|
2006-02-07 00:18:10 +01:00
|
|
|
eval create table t1(n int not null auto_increment primary key)ENGINE=$engine_type;
|
2001-06-21 21:19:24 +02:00
|
|
|
insert into t1 values (NULL);
|
|
|
|
drop table t1;
|
2006-02-07 00:18:10 +01:00
|
|
|
eval create table t1 (word char(20) not null)ENGINE=$engine_type;
|
2006-01-24 08:30:54 +01:00
|
|
|
load data infile '../std_data_ln/words.dat' into table t1 ignore 1 lines;
|
2003-08-10 04:14:16 +02:00
|
|
|
select count(*) from t1;
|
2001-12-15 03:41:20 +01:00
|
|
|
--replace_result $VERSION VERSION
|
2005-12-22 06:39:02 +01:00
|
|
|
--replace_column 2 # 5 #
|
2006-02-24 16:19:55 +01:00
|
|
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
2001-06-21 21:19:24 +02:00
|
|
|
show binlog events;
|
2005-12-22 06:39:02 +01:00
|
|
|
--replace_column 2 # 5 #
|
2006-02-24 16:19:55 +01:00
|
|
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
2007-03-29 21:38:03 +02:00
|
|
|
show binlog events from 106 limit 1;
|
2005-12-22 06:39:02 +01:00
|
|
|
--replace_column 2 # 5 #
|
2006-02-24 16:19:55 +01:00
|
|
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
2007-03-29 21:38:03 +02:00
|
|
|
show binlog events from 106 limit 2;
|
2005-12-22 06:39:02 +01:00
|
|
|
--replace_column 2 # 5 #
|
2006-02-24 16:19:55 +01:00
|
|
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
2007-03-29 21:38:03 +02:00
|
|
|
show binlog events from 106 limit 2,1;
|
2001-06-21 21:19:24 +02:00
|
|
|
flush logs;
|
2002-09-11 05:40:08 +02:00
|
|
|
|
2003-05-27 23:07:32 +02:00
|
|
|
# We need an extra update before doing save_master_pos.
|
|
|
|
# Otherwise, an unlikely scenario may occur:
|
|
|
|
# * When the master's binlog_dump thread reads the end of master-bin.001,
|
|
|
|
# it send the rotate event which is at this end, plus a fake rotate event
|
|
|
|
# because it's starting to read a new binlog.
|
|
|
|
# save_master_pos will record the position of the first of the two rotate
|
|
|
|
# (because the fake one is not in the master's binlog anyway).
|
|
|
|
# * Later the slave waits for the position of the first rotate event,
|
|
|
|
# and it may quickly stop (in 'slave stop') without having received the fake
|
|
|
|
# one.
|
|
|
|
# So, depending on a few milliseconds, we end up with 2 rotate events in the
|
|
|
|
# relay log or one, which influences the output of SHOW SLAVE STATUS, making
|
|
|
|
# it not predictable and causing random test failures.
|
2003-08-10 04:14:16 +02:00
|
|
|
# To make it predictable, we do a useless update now, but which has the
|
|
|
|
# interest of making the slave catch both rotate events.
|
2003-05-27 23:07:32 +02:00
|
|
|
|
2006-02-16 21:50:05 +01:00
|
|
|
eval create table t3 (a int)ENGINE=$engine_type;
|
2003-05-27 23:07:32 +02:00
|
|
|
|
2002-09-11 05:40:08 +02:00
|
|
|
# Sync slave and force it to start on another binary log
|
|
|
|
|
Bug#19259 rpl_ndb_dd_partitions failed on Solaris
Actually, this testcase will fail generally on all testing platforms.
The bugs come from the inconsistent bitmap between rpl master and slave.
In log_event.cc, the n_bits of m_cols and m_cols_ai are intialized with octal-ceiling
m_width, in fact, their n_bits should be equal to m_width.
Wrong n_bits will cause bitmap_bits_set() get incorrect value in unpack_row()
in rpl_record.cc,
then an assertion in unpack_row() will fail and crash sql thread.
DBUG_ASSERT(null_ptr == row_data + master_null_byte_count);
Meanwhile, because of binlog_prepare_pending_rows_event() changed with correct
m_cols, some results of specific testcases should be updated:
binlog_multi_engine.test
ndb_binlog_multi.test
rpl_ndb_dd_partitions.test
rpl_ndb_log.test
rpl_truncate_7ndb.test
rpl_truncate_7ndb_2.test
In addition, to ensure rows replication correct between master and slave after the patch,
two 'select * from t1' are added in extra/rpl_tests/rpl_log.test, and some testcases include
rpl_log.test, therefore, the results of these testcases should be updated likewise:
rpl_stm_log.test
rpl_row_log.test
rpl_ndb_log.test
rpl_row_log_innodb.test
Totally, results of nine testcases are updated.
2007-07-12 09:19:29 +02:00
|
|
|
#show rows of t1 on master
|
|
|
|
connection master;
|
|
|
|
select * from t1 order by 1 asc;
|
|
|
|
|
2002-09-11 05:40:08 +02:00
|
|
|
save_master_pos;
|
|
|
|
connection slave;
|
2003-05-27 23:07:32 +02:00
|
|
|
# Note that the above 'slave start' will cause a 3rd rotate event (a fake one)
|
|
|
|
# to go into the relay log (the master always sends a fake one when replication
|
|
|
|
# starts).
|
2003-06-04 22:17:01 +02:00
|
|
|
start slave;
|
2006-05-16 14:59:44 +02:00
|
|
|
let $result_pattern= '%127.0.0.1%root%master-bin.000002%slave-relay-bin.000005%Yes%Yes%0%0%None%';
|
2006-05-11 00:58:13 +02:00
|
|
|
--source include/wait_slave_status.inc
|
2002-09-11 05:40:08 +02:00
|
|
|
sync_with_master;
|
Bug#19259 rpl_ndb_dd_partitions failed on Solaris
Actually, this testcase will fail generally on all testing platforms.
The bugs come from the inconsistent bitmap between rpl master and slave.
In log_event.cc, the n_bits of m_cols and m_cols_ai are intialized with octal-ceiling
m_width, in fact, their n_bits should be equal to m_width.
Wrong n_bits will cause bitmap_bits_set() get incorrect value in unpack_row()
in rpl_record.cc,
then an assertion in unpack_row() will fail and crash sql thread.
DBUG_ASSERT(null_ptr == row_data + master_null_byte_count);
Meanwhile, because of binlog_prepare_pending_rows_event() changed with correct
m_cols, some results of specific testcases should be updated:
binlog_multi_engine.test
ndb_binlog_multi.test
rpl_ndb_dd_partitions.test
rpl_ndb_log.test
rpl_truncate_7ndb.test
rpl_truncate_7ndb_2.test
In addition, to ensure rows replication correct between master and slave after the patch,
two 'select * from t1' are added in extra/rpl_tests/rpl_log.test, and some testcases include
rpl_log.test, therefore, the results of these testcases should be updated likewise:
rpl_stm_log.test
rpl_row_log.test
rpl_ndb_log.test
rpl_row_log_innodb.test
Totally, results of nine testcases are updated.
2007-07-12 09:19:29 +02:00
|
|
|
#check t1 on slave to ensure whether it's identical with on master
|
|
|
|
select * from t1 order by 1 asc;
|
2002-09-11 05:40:08 +02:00
|
|
|
flush logs;
|
2002-10-25 01:46:14 +02:00
|
|
|
stop slave;
|
2002-09-11 05:40:08 +02:00
|
|
|
connection master;
|
|
|
|
|
|
|
|
# Create some entries for second log
|
|
|
|
|
2006-02-16 21:50:05 +01:00
|
|
|
eval create table t2 (n int)ENGINE=$engine_type;
|
|
|
|
insert into t2 values (1);
|
2007-03-30 10:27:08 +02:00
|
|
|
source include/show_binlog_events.inc;
|
2003-12-19 22:40:23 +01:00
|
|
|
--replace_result $VERSION VERSION
|
2005-12-22 06:39:02 +01:00
|
|
|
--replace_column 2 # 5 #
|
2006-02-24 16:19:55 +01:00
|
|
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
2002-10-29 23:11:13 +01:00
|
|
|
show binlog events in 'master-bin.000002';
|
2002-10-25 02:32:42 +02:00
|
|
|
show binary logs;
|
2001-06-21 21:19:24 +02:00
|
|
|
save_master_pos;
|
|
|
|
connection slave;
|
2002-10-25 01:46:14 +02:00
|
|
|
start slave;
|
2001-06-21 21:19:24 +02:00
|
|
|
sync_with_master;
|
2002-10-25 02:32:42 +02:00
|
|
|
show binary logs;
|
2004-05-10 12:15:40 +02:00
|
|
|
--replace_result $MASTER_MYPORT MASTER_PORT $VERSION VERSION
|
2005-12-22 06:39:02 +01:00
|
|
|
--replace_column 2 # 5 #
|
2006-02-24 16:19:55 +01:00
|
|
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
2002-10-29 23:11:13 +01:00
|
|
|
show binlog events in 'slave-bin.000001' from 4;
|
2004-05-10 12:15:40 +02:00
|
|
|
--replace_result $MASTER_MYPORT MASTER_PORT $VERSION VERSION
|
2005-12-22 06:39:02 +01:00
|
|
|
--replace_column 2 # 5 #
|
2006-02-24 16:19:55 +01:00
|
|
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
2002-10-29 23:11:13 +01:00
|
|
|
show binlog events in 'slave-bin.000002' from 4;
|
2007-06-11 22:15:39 +02:00
|
|
|
source include/show_slave_status.inc;
|
2002-09-11 05:40:08 +02:00
|
|
|
|
|
|
|
# Need to recode the following
|
|
|
|
|
2002-10-29 23:11:13 +01:00
|
|
|
#show new master for slave with master_log_file='master-bin.000001' and master_log_pos=4 and master_server_id=1;
|
|
|
|
#show new master for slave with master_log_file='master-bin.000001' and master_log_pos=79 and master_server_id=1;
|
|
|
|
#show new master for slave with master_log_file='master-bin.000001' and master_log_pos=311 and master_server_id=1;
|
|
|
|
#show new master for slave with master_log_file='master-bin.000002' and master_log_pos=4 and master_server_id=1;
|
|
|
|
#show new master for slave with master_log_file='master-bin.000002' and master_log_pos=122 and master_server_id=1;
|
2002-09-11 05:40:08 +02:00
|
|
|
|
|
|
|
--error 1220
|
2002-10-29 23:11:13 +01:00
|
|
|
show binlog events in 'slave-bin.000005' from 4;
|
2006-02-16 21:50:05 +01:00
|
|
|
|
2007-03-01 15:25:42 +01:00
|
|
|
connection master;
|
|
|
|
|
2006-06-19 02:26:27 +02:00
|
|
|
# The table drops caused Cluster Replication wrapper to fail as event ID would never be the same.# Moving drops here.
|
|
|
|
|
|
|
|
DROP TABLE t1;
|
|
|
|
DROP TABLE t2;
|
|
|
|
DROP TABLE t3;
|
|
|
|
|
2006-06-07 11:01:10 +02:00
|
|
|
#
|
|
|
|
# Bug #6880: LAST_INSERT_ID() within a statement
|
|
|
|
#
|
|
|
|
|
|
|
|
create table t1(a int auto_increment primary key, b int);
|
|
|
|
insert into t1 values (NULL, 1);
|
|
|
|
reset master;
|
|
|
|
set insert_id=5;
|
|
|
|
insert into t1 values (NULL, last_insert_id()), (NULL, last_insert_id());
|
2007-03-30 10:27:08 +02:00
|
|
|
source include/show_binlog_events.inc;
|
2006-06-07 11:01:10 +02:00
|
|
|
select * from t1;
|
|
|
|
drop table t1;
|
|
|
|
|
2005-07-28 02:22:47 +02:00
|
|
|
# End of 4.1 tests
|
2006-02-16 21:50:05 +01:00
|
|
|
|
2007-03-01 15:25:42 +01:00
|
|
|
sync_with_master;
|
|
|
|
|