199 lines
8.6 KiB
Plaintext
199 lines
8.6 KiB
Plaintext
# === Purpose ===
|
|
#
|
|
# This test ensures that replication is successful when slave server is
|
|
# initialized by providing server-id and started without providing server-id
|
|
# In this scenario, START SLAVE failed and fix of Bug#26730000 solved the issue
|
|
#
|
|
# The test also verifies the behaviour when server-id provided during
|
|
# server initialization is different from that given during starting server
|
|
#
|
|
# The test also verifies that proper error is thrown on attempting to configure
|
|
# replication on a server whose server-id is set to 0
|
|
#
|
|
# The test also verifies that attempting to configure replication between two
|
|
# servers having same server-id fails
|
|
#
|
|
# === Implementation ===
|
|
#
|
|
# 0. Start two servers server-1(master) and server-2(slave) in replication
|
|
# 1. Stop server-2 (slave)
|
|
# 2. Initialize server-2 by specifying server id to a new data directory
|
|
# 3. Start server-2 without specifying server id and enable replication between
|
|
# server-1 and server-2
|
|
# Verify that starting slave works and data is replicated from master to slave
|
|
# 4. Stop server-2 and initialize server-2 by specifying server-id=0 to a
|
|
# new data directory
|
|
# 5. Start server-2 by specifying a non-zero server-id, enable replication
|
|
# between server-1 and server-2 and verify replication works fine
|
|
# 6. Stop server-2 and initialize server-2 by specifying a non-zero server-id
|
|
# to a new data directory
|
|
# 7. Start server-2 by specifying server-id=0
|
|
# Try to enable replication between server-1 and server-2 and verify that
|
|
# proper error is thrown since server-id is set to 0
|
|
# 8. Stop server-2 and initialize server-2 by specifying server-id=1
|
|
# to a new data directory
|
|
# 9. Start server-2 by specifying server-id=1
|
|
# Try to enable replication between server-1 and server-2 and verify that
|
|
# proper error is thrown since master and slave have same server-id set
|
|
# 10. Restart server-2 with its original data directory
|
|
# 11. Clean up
|
|
|
|
# === References ===
|
|
#
|
|
# BUG#26730000 : SERVER_ID LOOKS SET TO VALID VALUE STILL START SLAVE FAILS WITH
|
|
# ER_BAD_SLAVE
|
|
# BUG#26862504 : ADD INITIALIZE, STARTUP RPL TEST FOR OPTION LOG-BIN & SERVER-ID
|
|
# COMBINATION
|
|
|
|
--source include/big_test.inc
|
|
--source include/master-slave.inc
|
|
|
|
--echo
|
|
--source include/rpl_connection_slave.inc
|
|
# Save original datadir and basedir path of server-2
|
|
--let ORIGINAL_MYSQLD_DATADIR= `select @@datadir`
|
|
--let ORIGINAL_MYSQLD_BASEDIR= `select @@basedir`
|
|
|
|
# Setup new datadir path
|
|
--let NEWDATADIR=$MYSQL_TMP_DIR/rpl_initialize_serverid
|
|
mkdir $NEWDATADIR;
|
|
--write_file $MYSQL_TMP_DIR/bootstrap_test.sql
|
|
CREATE DATABASE test;
|
|
USE test;
|
|
EOF
|
|
|
|
--let MYSQLD_LOG=$MYSQL_TMP_DIR/server.log
|
|
--let args=--no-defaults --innodb_dedicated_server=OFF --console --basedir=$ORIGINAL_MYSQLD_BASEDIR
|
|
|
|
# 1. Stop slave server so that it can be initialized by specifying server-id and
|
|
# started without specifying server-id
|
|
--let $rpl_server_number= 2
|
|
--source include/rpl_stop_server.inc
|
|
|
|
# 2. Since server-2 has previously been initialized to a data directory by MTR,
|
|
# it is required to initialize again by specifying the server-id to a new
|
|
# data directory path
|
|
--exec $MYSQLD $args --initialize-insecure --datadir=$NEWDATADIR --init-file=$MYSQL_TMP_DIR/bootstrap_test.sql --server-id=2 > $MYSQLD_LOG
|
|
# Execute DDL,DML on server-1 so as to ensure that this data will be replicated
|
|
# to server-2 once replication starts between server-1 and server-2
|
|
--echo
|
|
--source include/rpl_connection_master.inc
|
|
CREATE DATABASE db;
|
|
use db;
|
|
CREATE TABLE t1 (a int);
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
--echo
|
|
--source include/rpl_connection_slave.inc
|
|
# 3. Once server-2 has been initialized by specifying server-id to a new data
|
|
# directory, start server-2 without specifying the server-id using the new
|
|
# data directory path.
|
|
# Then start replication between server-1 (master) and server-2 (slave) and
|
|
# verify if data on master has been replicated to slave
|
|
--let $rpl_server_number= 2
|
|
--let $rpl_server_parameters= --log-bin=slave-bin --datadir=$NEWDATADIR --slave-load-tmpdir=$MYSQLTEST_VARDIR/tmp --skip-slave-start=1
|
|
--let $rpl_omit_print_server_parameters= 1
|
|
--source include/rpl_start_server.inc
|
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
|
--eval CHANGE MASTER TO MASTER_USER='root', MASTER_PORT=$MASTER_MYPORT, MASTER_HOST='localhost'
|
|
--source include/start_slave.inc
|
|
--echo
|
|
--source include/rpl_connection_master.inc
|
|
--source include/sync_slave_sql_with_master.inc
|
|
--let $diff_tables= master:db.t1, slave:db.t1
|
|
--source include/diff_tables.inc
|
|
|
|
|
|
# 4. Stop server-2 and initialize server-2 by specifying server-id=0 to a
|
|
# new data directory
|
|
--let NEWDATADIR_2=$MYSQL_TMP_DIR/rpl_initialize_serverid_2
|
|
mkdir $NEWDATADIR_2;
|
|
--let $rpl_server_number= 2
|
|
--source include/rpl_stop_server.inc
|
|
--exec $MYSQLD $args --initialize-insecure --datadir=$NEWDATADIR_2 --init-file=$MYSQL_TMP_DIR/bootstrap_test.sql --server-id=0 > $MYSQLD_LOG
|
|
# 5. Start server-2 by specifying a non-zero server-id, enable replication
|
|
# between server-1 and server-2 and verify replication works fine
|
|
--echo
|
|
--source include/rpl_connection_slave.inc
|
|
--let $rpl_server_number= 2
|
|
--let $rpl_server_parameters= --server-id=2 --log-bin=slave-bin --datadir=$NEWDATADIR_2 --slave-load-tmpdir=$MYSQLTEST_VARDIR/tmp --skip-slave-start=1
|
|
--let $rpl_omit_print_server_parameters= 1
|
|
--source include/rpl_start_server.inc
|
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
|
--eval CHANGE MASTER TO MASTER_USER='root', MASTER_PORT=$MASTER_MYPORT, MASTER_HOST='localhost'
|
|
--source include/start_slave.inc
|
|
--echo
|
|
--source include/rpl_connection_master.inc
|
|
--source include/sync_slave_sql_with_master.inc
|
|
--let $diff_tables= master:db.t1, slave:db.t1
|
|
--source include/diff_tables.inc
|
|
|
|
# 6. Stop server-2 and initialize server-2 by specifying a non-zero server-id
|
|
# to a new data directory
|
|
--let NEWDATADIR_3=$MYSQL_TMP_DIR/rpl_initialize_serverid_3
|
|
mkdir $NEWDATADIR_3;
|
|
--let $rpl_server_number= 2
|
|
--source include/rpl_stop_server.inc
|
|
--exec $MYSQLD $args --initialize-insecure --datadir=$NEWDATADIR_3 --init-file=$MYSQL_TMP_DIR/bootstrap_test.sql --server-id=2 > $MYSQLD_LOG
|
|
# 7. Start server-2 by specifying server-id=0
|
|
# Try to enable replication between server-1 and server-2 and verify that
|
|
# proper error is thrown since server-id is set to 0
|
|
--echo
|
|
--source include/rpl_connection_slave.inc
|
|
--let $rpl_server_number= 2
|
|
--let $rpl_server_parameters= --server-id=0 --log-bin=slave-bin --datadir=$NEWDATADIR_3 --slave-load-tmpdir=$MYSQLTEST_VARDIR/tmp --skip-slave-start=1
|
|
--let $rpl_omit_print_server_parameters= 1
|
|
--source include/rpl_start_server.inc
|
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
|
--error ER_SLAVE_CONFIGURATION
|
|
--eval CHANGE MASTER TO MASTER_USER='root', MASTER_PORT=$MASTER_MYPORT, MASTER_HOST='localhost'
|
|
|
|
# 8. Stop server-2 and initialize server-2 by specifying server-id=1 to
|
|
# a new data directory
|
|
--let NEWDATADIR_4=$MYSQL_TMP_DIR/rpl_initialize_serverid_4
|
|
mkdir $NEWDATADIR_4;
|
|
--let $rpl_server_number= 2
|
|
--source include/rpl_stop_server.inc
|
|
--exec $MYSQLD $args --initialize-insecure --datadir=$NEWDATADIR_4 --init-file=$MYSQL_TMP_DIR/bootstrap_test.sql --server-id=1 > $MYSQLD_LOG
|
|
# 9. Start server-2 by specifying server-id=1
|
|
# Try to enable replication between server-1 and server-2 and verify that
|
|
# proper error is thrown since both master and slave have same server-id
|
|
--echo
|
|
--source include/rpl_connection_slave.inc
|
|
--let $rpl_server_number= 2
|
|
--let $rpl_server_parameters= --server-id=1 --log-bin=slave-bin --datadir=$NEWDATADIR_4 --slave-load-tmpdir=$MYSQLTEST_VARDIR/tmp --skip-slave-start=1
|
|
--let $rpl_omit_print_server_parameters= 1
|
|
--source include/rpl_start_server.inc
|
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
|
--eval CHANGE MASTER TO MASTER_USER='root', MASTER_PORT=$MASTER_MYPORT, MASTER_HOST='localhost'
|
|
START SLAVE;
|
|
# Verify that slave IO error occurs on START SLAVE
|
|
# 13117 is the code for ER_SLAVE_FATAL_ERROR
|
|
--let $slave_io_errno= 13117
|
|
--source include/wait_for_slave_io_error.inc
|
|
|
|
# 10. Restart server-2 with the original datadir to bring it back to
|
|
# original state
|
|
--let $rpl_server_number= 2
|
|
--let $rpl_server_parameters= --datadir=$ORIGINAL_MYSQLD_DATADIR --basedir=$ORIGINAL_MYSQLD_BASEDIR --skip-slave-start=0
|
|
--let $rpl_omit_print_server_parameters= 1
|
|
--source include/rpl_restart_server.inc
|
|
|
|
# 11. Cleanup files and new data directories created during the test
|
|
remove_file $MYSQLD_LOG;
|
|
remove_file $MYSQL_TMP_DIR/bootstrap_test.sql;
|
|
--force-rmdir $NEWDATADIR
|
|
--force-rmdir $NEWDATADIR_2
|
|
--force-rmdir $NEWDATADIR_3
|
|
--force-rmdir $NEWDATADIR_4
|
|
--echo
|
|
--source include/rpl_connection_master.inc
|
|
DROP DATABASE db;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
--echo
|
|
--source include/rpl_end.inc
|
|
|
|
--connection master
|
|
--source suite/xengine/include/check_xengine_log_error.inc
|