rpl_relayrotate.test
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:
MySQL数据库
开发平台:
Visual C++
- # When the relay log gets rotated while the I/O thread
- # is reading a transaction, the transaction spans on two or more
- # relay logs. If STOP SLAVE occurs while the SQL thread is
- # executing a part of the transaction in the non-first relay logs,
- # we test if START SLAVE will resume in the beginning of the
- # transaction (i.e., step back to the first relay log)
- # The slave is started with max_binlog_size=16384 bytes,
- # to force many rotations (approximately 30 rotations)
- source include/have_innodb.inc;
- source include/master-slave.inc;
- connection slave;
- stop slave;
- connection master;
- --disable_warnings
- create table t1 (a int) engine=innodb;
- --enable_warnings
- let $1=8000;
- disable_query_log;
- begin;
- while ($1)
- {
- # eval means expand $ expressions
- eval insert into t1 values( $1 );
- dec $1;
- }
- commit;
- # This will generate a 500kB master's binlog,
- # which corresponds to 30 slave's relay logs.
- enable_query_log;
- save_master_pos;
- connection slave;
- reset slave;
- start slave;
- # We wait 1 sec for the SQL thread to be somewhere in
- # the middle of the transaction, hopefully not in
- # the first relay log, and hopefully before the COMMIT.
- # Usually it stops when the SQL thread is around the 15th relay log.
- # We cannot use MASTER_POS_WAIT() as master's position
- # increases only when the slave executes the COMMIT.
- # Note that except when using Valgrind, 1 second is enough for the I/O slave
- # thread to fetch the whole master's binlog.
- sleep 1;
- stop slave;
- # We suppose the SQL thread stopped before COMMIT.
- # If so the transaction was rolled back
- # and the table is now empty.
- # Now restart
- start slave;
- # And see if the table contains '8000'
- # which proves that the transaction restarted at
- # the right place.
- # We must wait for the transaction to commit before
- # reading, MASTER_POS_WAIT() will do it for sure
- # (the only statement with position>=3000 is COMMIT).
- select master_pos_wait('master-bin.001',3000)>=0;
- select * from t1 where a=8000;
- connection master;
- # The following DROP is a very important cleaning task:
- # imagine the next test is run with --skip-innodb: it will do
- # DROP TABLE IF EXISTS t1; but this will delete the frm and leave
- # some data in the InnoDB datafile (because at that time mysqld
- # does not know about InnoDB : --skip-innodb). So if later in the
- # test suite a test wants to create an InnoDB table called t1, it
- # will fail with
- # InnoDB: Error: table t1 already exists in InnoDB internal
- # InnoDB: data dictionary. Have you deleted the .frm file etc
- drop table t1;
- # wait until this drop is executed on slave
- save_master_pos;
- connection slave;
- sync_with_master;
- # End of 4.1 tests