1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
|
# ==== Purpose ====
#
# This test script serves as the functionality testing for
# WL#6120- Change master without stopping Slave threads.
#
# This test script does the following:
# - Ensure that the behavior does not change for CHANGE MASTER when both the
# IO and SQL threads are stopped.
# - We have two types of options- receiver options and applier options under
# CHANGE MASTER
# And we have a very simple rule:
# - Allow setting receiver options when the receiver is not running,
# - Allow setting applier options when the applier is not running,
# Make sure we stick to the above mentioned rule.
# The follwing scenarios are tested:
#
# - With both receiver and applier stopped, all CHANGE MASTER options should be
# allowed.
# - With receiver stopped and applier running, we should be able to change
# receiver options.
# - Setting receiver options should throw the correct error message.
# - Using an allowed option and a not allowed option should error out.
# - With applier stopped and receiver running, we should be able to change
# applier options.
# - Setting applier options should throw the correct error message.
# - Using an allowed option and a not allowed option should error out.
#
# ==== Related Worklog(s) And Bug(s)====
#
# WL#6120- Change master without stopping Slave threads.
#
--let $rpl_privilege_checks_user_grant_option = 1
--source include/set_privilege_checks_user_as_system_user.inc
--source include/master-slave.inc
--source include/have_binlog_format_mixed.inc
--echo
--echo Create a replication user to use in change master tests.
--echo
--connection master
CREATE USER replssl@localhost REQUIRE SSL;
GRANT REPLICATION SLAVE ON *.* TO replssl@localhost;
--source include/sync_slave_sql_with_master.inc
--echo
--echo With both receiver and applier stopped, all CHANGE MASTER options should
--echo be allowed.
--echo
--source include/stop_slave.inc
let $master_log_file= query_get_value(SHOW SLAVE STATUS, Master_Log_File, 1);
let $master_log_pos= query_get_value(SHOW SLAVE STATUS, Read_Master_Log_Pos, 1);
let $master_id= query_get_value(SHOW SLAVE STATUS, Master_Server_Id, 1);
--let $save_autoposition= query_get_value(SHOW SLAVE STATUS, Auto_Position, 1)
CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION= 0;
--connection slave
--disable_query_log
replace_result $master_log_file MASTER_LOG_FILE;
replace_result $master_log_pos MASTER_LOG_POS;
replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR;
replace_column 2 ####;
eval CHANGE REPLICATION SOURCE TO
SOURCE_HOST= 'localhost',
SOURCE_USER= 'replssl',
SOURCE_PASSWORD= '',
SOURCE_PORT= $MASTER_MYPORT,
SOURCE_CONNECT_RETRY= 20,
SOURCE_RETRY_COUNT= 1,
SOURCE_DELAY= 20,
SOURCE_LOG_FILE= '$master_log_file',
SOURCE_LOG_POS= $master_log_pos,
SOURCE_HEARTBEAT_PERIOD= 20,
IGNORE_SERVER_IDS= ($master_id),
SOURCE_AUTO_POSITION= 0,
SOURCE_SSL= 1,
SOURCE_SSL_CA= '$MYSQL_TEST_DIR/std_data/cacert.pem',
SOURCE_SSL_CERT= '$MYSQL_TEST_DIR/std_data/client-cert.pem',
SOURCE_SSL_KEY= '$MYSQL_TEST_DIR/std_data/client-key.pem',
SOURCE_SSL_VERIFY_SERVER_CERT= 1;
--enable_query_log
let $relay_log_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1);
--replace_result $relay_log_file RELAY_LOG_FILE
eval CHANGE REPLICATION SOURCE TO RELAY_LOG_FILE= '$relay_log_file';
let $relay_log_pos= query_get_value(SHOW SLAVE STATUS, Relay_Log_Pos, 1);
--replace_result $relay_log_pos RELAY_LOG_POS
eval CHANGE REPLICATION SOURCE TO RELAY_LOG_POS= $relay_log_pos;
CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION= 1;
#Re-setting auto_position=0 to continue testing position related options.
CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION= 0;
--echo
--echo With receiver stopped and applier running, we should be able to change
--echo receiver options. Setting applier options should throw the correct error
--echo message.
--echo
--source include/start_slave_sql.inc
--disable_query_log
replace_result $master_log_file MASTER_LOG_FILE;
replace_result $master_log_pos MASTER_LOG_POS;
replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR;
replace_column 2 ####;
eval CHANGE REPLICATION SOURCE TO
SOURCE_HOST= 'localhost',
SOURCE_USER= 'replssl',
SOURCE_PASSWORD= '',
SOURCE_PORT= $MASTER_MYPORT,
SOURCE_CONNECT_RETRY= 20,
SOURCE_RETRY_COUNT= 1,
SOURCE_LOG_FILE= '$master_log_file',
SOURCE_LOG_POS= $master_log_pos,
SOURCE_HEARTBEAT_PERIOD= 20,
IGNORE_SERVER_IDS= ($master_id),
SOURCE_SSL= 1,
SOURCE_SSL_CA= '$MYSQL_TEST_DIR/std_data/cacert.pem',
SOURCE_SSL_CERT= '$MYSQL_TEST_DIR/std_data/client-cert.pem',
SOURCE_SSL_KEY= '$MYSQL_TEST_DIR/std_data/client-key.pem',
SOURCE_SSL_VERIFY_SERVER_CERT= 1;
--enable_query_log
# Now on to some negative testing
# Both receiver and applier needs to be stopped to set the auto_position option.
--error ER_REPLICA_CHANNEL_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION= 1;
--error ER_REPLICA_CHANNEL_MUST_STOP
CHANGE REPLICATION SOURCE TO ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = LOCAL;
# Since the applier is running, using the applier options should error out.
--replace_result $relay_log_file RELAY_LOG_FILE
--error ER_REPLICA_CHANNEL_SQL_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO RELAY_LOG_FILE= '$relay_log_file';
--replace_result $relay_log_pos RELAY_LOG_POS
--error ER_REPLICA_CHANNEL_SQL_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO RELAY_LOG_POS= $relay_log_pos;
--error ER_REPLICA_CHANNEL_SQL_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_DELAY= 10;
# Using an allowed option and a not allowed option should throw an error.
--replace_result $relay_log_file RELAY_LOG_FILE
--error ER_REPLICA_CHANNEL_SQL_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_RETRY_COUNT= 1, RELAY_LOG_FILE= '$relay_log_file';
--replace_result $relay_log_pos RELAY_LOG_POS
--error ER_REPLICA_CHANNEL_SQL_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_RETRY_COUNT= 1, RELAY_LOG_POS= $relay_log_pos;
--error ER_REPLICA_CHANNEL_SQL_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_RETRY_COUNT= 1, SOURCE_DELAY=10;
--echo
--echo With applier stopped and receiver running, we should be able to change
--echo applier options. Setting receiver options should throw the correct error
--echo message.
--echo
--source include/stop_slave_sql.inc
--source include/start_slave_io.inc
--replace_result $relay_log_file RELAY_LOG_FILE
eval CHANGE REPLICATION SOURCE TO RELAY_LOG_FILE= '$relay_log_file';
--replace_result $relay_log_pos RELAY_LOG_POS
eval CHANGE REPLICATION SOURCE TO RELAY_LOG_POS= $relay_log_pos;
CHANGE REPLICATION SOURCE TO SOURCE_DELAY= 10;
# Now on to some negative testing
# Both receiver and applier needs to be stopped to set the auto_position option.
--error ER_REPLICA_CHANNEL_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION= 1;
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_HOST= 'localhost';
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_USER= 'replssl';
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_PASSWORD= '';
--disable_query_log
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_PORT= $MASTER_MYPORT;
--enable_query_log
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_CONNECT_RETRY= 20;
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_RETRY_COUNT= 1;
--disable_query_log
--replace_result $master_log_file MASTER_LOG_FILE
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_LOG_FILE= '$master_log_file';
--replace_result $master_log_pos MASTER_LOG_POS
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_LOG_POS= $master_log_pos;
--enable_query_log
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_HEARTBEAT_PERIOD= 20;
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_SSL= 1;
--disable_query_log
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_SSL_CA= '$MYSQL_TEST_DIR/std_data/cacert.pem';
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_SSL_CERT= '$MYSQL_TEST_DIR/std_data/client-cert.pem';
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_SSL_KEY= '$MYSQL_TEST_DIR/std_data/client-key.pem';
--enable_query_log
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_SSL_VERIFY_SERVER_CERT= 1;
# Using an allowed option and a not allowed option should throw an error.
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_DELAY=10, SOURCE_HOST= 'localhost';
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_DELAY=10, SOURCE_USER= 'replssl';
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_DELAY=10, SOURCE_PASSWORD= '';
--disable_query_log
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_DELAY=10, SOURCE_PORT= $MASTER_MYPORT;
--enable_query_log
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_DELAY=10, SOURCE_CONNECT_RETRY= 20;
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_DELAY=10, SOURCE_RETRY_COUNT= 1;
--disable_query_log
--replace_result $master_log_file MASTER_LOG_FILE
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_DELAY= 10, SOURCE_LOG_FILE= '$master_log_file';
--replace_result $master_log_pos MASTER_LOG_POS
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_DELAY= 10, SOURCE_LOG_POS= $master_log_pos;
--enable_query_log
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_DELAY= 10, SOURCE_HEARTBEAT_PERIOD= 20;
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_DELAY=10, SOURCE_SSL=1;
--disable_query_log
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_DELAY=10, SOURCE_SSL_CA ='$MYSQL_TEST_DIR/std_data/cacert.pem';
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_DELAY=10, SOURCE_SSL_CERT= '$MYSQL_TEST_DIR/std_data/client-cert.pem';
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
eval CHANGE REPLICATION SOURCE TO SOURCE_DELAY=10, SOURCE_SSL_KEY= '$MYSQL_TEST_DIR/std_data/client-key.pem';
--enable_query_log
--error ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP
CHANGE REPLICATION SOURCE TO SOURCE_DELAY= 10, SOURCE_SSL_VERIFY_SERVER_CERT= 1;
--source include/stop_slave.inc
--echo
--echo cleanup
--echo
replace_column 2 ####;
eval CHANGE REPLICATION SOURCE TO
SOURCE_HOST= '127.0.0.1',
SOURCE_USER= 'root',
SOURCE_DELAY= 0,
IGNORE_SERVER_IDS= (),
SOURCE_SSL= 0,
SOURCE_SSL_CA= '',
SOURCE_SSL_CERT= '',
SOURCE_SSL_KEY= '',
SOURCE_SSL_VERIFY_SERVER_CERT= 0;
--replace_result $save_autoposition SAVE_AUTOPOSITION
eval CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION= $save_autoposition;
--source include/start_slave.inc
--connection master
DROP USER replssl@localhost;
--source include/rpl_end.inc
|