📄 rpl_relayrotate.test
字号:
# 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_warningscreate table t1 (a int) engine=innodb;--enable_warningslet $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 restartstart 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:sync_with_master;select max(a) from t1;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 etcdrop table t1;# wait until this drop is executed on slavesave_master_pos;connection slave;sync_with_master;# End of 4.1 tests
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -