config root man

Current Path : /home/usr.opt/mysql57/mysql-test/suite/rpl/t/

FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64
Upload File :
Current File : //home/usr.opt/mysql57/mysql-test/suite/rpl/t/rpl_stm_until.test

# ==== Purpose ====
#
# Verify that START SLAVE UNTIL replicates until the given binlog
# position but not longer.  Verify that START SLAVE UNTIL with various
# incorrect arguments gives an error.
#
# ==== Method ====
#
# On master, create a table and insert some rows.  On slave, START
# SLAVE UNTIL so that it reads one event at a time, and check the
# table and the slave status each time.
#
# Then, on slave, run START SLAVE UNTIL with incorrect arguments and
# verify that it gives an error.
#
# ==== Related bugs ====
#
# Bug in this test: BUG#37717: rpl.rpl_stm_until 'stmt' fails sporadically on pushbuild

-- source include/have_binlog_format_mixed_or_statement.inc
-- source include/master-slave.inc
-- source include/not_mts_slave_parallel_workers.inc

# Test is dependent on binlog positions

call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");

# prepare version for substitutions
let $VERSION=`select version()`;

# Stop slave before it starts replication.  Also sync with master
# to avoid nondeterministic behaviour.
--echo [on slave]
--source include/sync_slave_sql_with_master.inc
--source include/stop_slave.inc

--echo ==== Create some events on master ====

--echo [on master]
connection master;
create table t1(n int not null auto_increment primary key);
insert into t1 values (1),(2),(3),(4);
let $master_log_pos_1= query_get_value(SHOW MASTER STATUS, Position, 1);
let $master_log_file= query_get_value(SHOW MASTER STATUS, File, 1);
drop table t1;
create table t2(n int not null auto_increment primary key);
insert into t2 values (1),(2);
let $master_log_pos_2= query_get_value(SHOW MASTER STATUS, Position, 1);
insert into t2 values (3),(4);
drop table t2;

--echo ==== Replicate one event at a time on slave ====

# try to replicate all queries until drop of t1
--echo [on slave]
connection slave;
--replace_result $master_log_file MASTER_LOG_FILE $master_log_pos_1 MASTER_LOG_POS
eval start slave until master_log_file='$master_log_file', master_log_pos=$master_log_pos_1;
--source include/wait_for_slave_io_to_start.inc
--source include/wait_for_slave_sql_to_stop.inc
# here table should be still not deleted
select * from t1;
--let $slave_param= Exec_Master_Log_Pos
--let $slave_param_value= $master_log_pos_1
--source include/check_slave_param.inc

# this should fail right after start
--replace_result 291 MASTER_LOG_POS
start slave until master_log_file='master-no-such-bin.000001', master_log_pos=291;
--source include/wait_for_slave_io_to_start.inc
--source include/wait_for_slave_sql_to_stop.inc
# again this table should be still not deleted
select * from t1;
--let $slave_param= Exec_Master_Log_Pos
--let $slave_param_value= $master_log_pos_1
--source include/check_slave_param.inc

let $relay_log_file= slave-relay-bin.000003;
let $master_log_pos= $master_log_pos_2;
source include/get_relay_log_pos.inc;
# try replicate all up to and not including the second insert to t2;
--replace_result $relay_log_pos RELAY_LOG_POS
eval start slave until relay_log_file='$relay_log_file', relay_log_pos=$relay_log_pos;
--source include/wait_for_slave_io_to_start.inc
--source include/wait_for_slave_sql_to_stop.inc
select * from t2;
--let $slave_param= Exec_Master_Log_Pos
--let $slave_param_value= $master_log_pos
--source include/check_slave_param.inc

# clean up
start slave;
--echo [on master]
connection master;
--echo [on slave]
--source include/sync_slave_sql_with_master.inc
--source include/stop_slave.inc

--let $exec_log_pos_1= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1)
# this should stop immediately as we are already there
--replace_result $master_log_file MASTER_LOG_FILE $master_log_pos_2 MASTER_LOG_POS
eval start slave until master_log_file='$master_log_file', master_log_pos=$master_log_pos_2;
--source include/wait_for_slave_io_to_start.inc
--source include/wait_for_slave_sql_to_stop.inc
--let $slave_param= Exec_Master_Log_Pos
--let $slave_param_value= $exec_log_pos_1
--source include/check_slave_param.inc

--echo ==== Test various error conditions ====

--replace_result 561 MASTER_LOG_POS
--error 1277
start slave until master_log_file='master-bin', master_log_pos=561;
--replace_result 561 MASTER_LOG_POS 12 RELAY_LOG_POS
--error 1277
start slave until master_log_file='master-bin.000001', master_log_pos=561, relay_log_pos=12;
--error 1277
start slave until master_log_file='master-bin.000001';
--error 1277
start slave until relay_log_file='slave-relay-bin.000002';
--replace_result 561 MASTER_LOG_POS
--error 1277
start slave until relay_log_file='slave-relay-bin.000002', master_log_pos=561;
# Warning should be given for second command
start slave sql_thread;
--replace_result 776 MASTER_LOG_POS
start slave until master_log_file='master-bin.000001', master_log_pos=776;

#
# Note: The test for START SLAVE UNTIL SQL_AFTER_MTS_GAPS is located
#       in rpl_parallel_start_stop.test
#

#
# bug#47210  first execution of "start slave until" stops too early  
#
# testing that a slave rotate event that is caused by stopping the slave
# does not intervene anymore in UNTIL condition.
#

connection slave;
source include/stop_slave.inc;
--disable_warnings
drop table if exists t1;
--enable_warnings
reset slave;
RESET MASTER;
--replace_result $MASTER_MYPORT MASTER_PORT
eval change master to master_host='127.0.0.1',master_port=$MASTER_MYPORT, master_user='root'; 

connection master;
--disable_warnings
drop table if exists t1;
--enable_warnings
reset master;
create table t1 (a int primary key auto_increment);
save_master_pos;
let $master_pos= query_get_value(SHOW MASTER STATUS, Position, 1);

connection slave;
start slave;
sync_with_master;

# at this point slave will close the relay log stamping it with its own
# Rotate log event. This event won't be examined on matter of the master 
# UNTIL pos anymore.
source include/stop_slave.inc;
let $slave_exec_pos= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1);

--echo master and slave are in sync now
let $diff_pos= `select $master_pos - $slave_exec_pos`;
eval select $diff_pos as zero;

connection master;
insert into t1 set a=null;
let $until_pos= query_get_value(SHOW MASTER STATUS, Position, 1);
insert into t1 set a=null;
select count(*) as two from t1;

connection slave;
--replace_result $master_log_file MASTER_LOG_FILE $until_pos UNTIL_POS;
eval start slave until master_log_file='$master_log_file', master_log_pos= $until_pos;
source include/wait_for_slave_sql_to_stop.inc;
let $slave_exec_pos= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1);
--echo slave stopped at the prescribed position
let $diff_pos= `select $until_pos - $slave_exec_pos`;
eval select $diff_pos as zero;
select count(*) as one from t1;


connection master;
drop table t1;

connection slave;
start slave;
sync_with_master;

#
# Bug #19010820 START SLAVE UNTIL WILL TIMEOUT IF WAITING FOR
#               THE LAST TRANSACTION IN RELAYLOG
#
# This part of the test verifies correctness and effectiveness of the
# until-stopping when the position used is inside the last group/transaction
# in the relaylog.
#
# It will create a single event transaction (if GTIDs are disabled)
# or a two events transaction (if GTIDs are enabled), and will start
# the SQL thread using the UNTIL MASTER_LOG_FILE/POS and RELAY_LOG_FILE/POS,
# pointing to the first or last byte of the created transaction.
#
# The test expects that, after issuing the START SLAVE SQL_THREAD with the
# UNTIL clause, the SQL thread will apply the created transaction and will
# update its position before stopping. The test will verify the
# binlog/relaylog file, the position, and finally will wait for the SQL
# thread to stop.
#

--source include/rpl_connection_master.inc
--echo # Make sure the master will put the new events in a new binlog file
FLUSH LOGS;

# Check if SQL thread stops correctly
# after executing the last event of the master binlog
# based on master binlog file and position
--echo # Testing the execution until the last transaction of the master binlog

# Stop the SQL thread after syncing
--source include/sync_slave_sql_with_master.inc
--source include/stop_slave_sql.inc

# Create a table in the master (one event without GTIDS, two with GTIDS)
--source include/rpl_connection_master.inc
CREATE TABLE t1 (a INT) ENGINE=InnoDB;

# Save master position to use on UNTIL clause of START SLAVE
--let $master_file= query_get_value(SHOW MASTER STATUS, File, 1)
--let $master_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
--dec $master_pos

# Sync the IO thread with the master
--source include/sync_slave_io_with_master.inc

--echo # Start SQL thread until it executed the CREATE TABLE
--replace_result $master_file MASTER_FILE $master_pos MASTER_POS
eval START SLAVE SQL_THREAD UNTIL MASTER_LOG_FILE = "$master_file", MASTER_LOG_POS = $master_pos;

--echo # Wait until SQL thread reaches last master binlog file
--let $slave_param= Relay_Master_Log_File
--let $slave_param_value= $master_file
--let $slave_param_comparison= =
--source include/wait_for_slave_param.inc

--echo # Wait until SQL thread reaches desired master binlog position
--let $slave_param= Exec_Master_Log_Pos
--let $slave_param_value= $master_pos
--let $slave_param_comparison= >=
--source include/wait_for_slave_param.inc

--echo # If the desired position was reached, SQL thread should stop.
--source include/wait_for_slave_sql_to_stop.inc

--let $assert_cond= "[SHOW TABLES LIKE "t1"]" = "t1"
--let $assert_text= t1 should be replicated
--source include/assert.inc
#
# Check if SQL thread stops correctly
# after executing the last event of the slave relaylog
# based on slave relaylog file and position
--echo # Testing the execution until the last transaction of the slave relaylog

# Save slave position to use on UNTIL clause of START SLAVE
--let $slave_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1)
--let $slave_pos= query_get_value(SHOW SLAVE STATUS, Relay_Log_Pos, 1)
--inc $slave_pos

# Create a table in the master
# (one event if GTID_MODE=OFF; two events if GTID_MODE=ON)
--source include/rpl_connection_master.inc
CREATE TABLE t2 (a INT) ENGINE=InnoDB;

# Sync the IO thread with the master
--source include/sync_slave_io_with_master.inc

--echo # Start SQL thread until it executed the CREATE TABLE
--replace_result $slave_file SLAVE_FILE $slave_pos SLAVE_POS
eval START SLAVE SQL_THREAD UNTIL RELAY_LOG_FILE = "$slave_file", RELAY_LOG_POS = $slave_pos;

--echo # Wait until SQL thread reaches last slave relaylog file
--let $slave_param= Relay_Log_File
--let $slave_param_value= $slave_file
--let $slave_param_comparison= =
--source include/wait_for_slave_param.inc

--echo # Wait until SQL thread reaches desired slave relaylog position
--let $slave_param= Relay_Log_Pos
--let $slave_param_value= $slave_pos
--let $slave_param_comparison= >=
--source include/wait_for_slave_param.inc

--echo # If the desired position was reached, SQL thread should stop.
--source include/wait_for_slave_sql_to_stop.inc

--let $assert_cond= "[SHOW TABLES LIKE "t2"]" = "t2"
--let $assert_text= t2 should be replicated
--source include/assert.inc

# Cleanup
--source include/start_slave_sql.inc
--source include/rpl_connection_master.inc
DROP TABLE t1, t2;

# End of tests
--source include/rpl_end.inc

Man Man