File: rpl_reset_slave.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (183 lines) | stat: -rw-r--r-- 5,512 bytes parent folder | download
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
# TBF - difference in row level logging
# Temp tables are not replicated in rbr, but it is still good to hit rbr with everthing

# See SHOW SLAVE STATUS displays well after RESET SLAVE (it should display the
# --master-* options from mysqld, as this is what is going to be used next time
# slave threads will be started). In bug 985, it displayed old values (of before
# RESET SLAVE).
# See if slave crashes when doing a CREATE TEMPORARY TABLE twice, separated by
# RESET SLAVE.

-- source include/master-slave.inc
sync_slave_with_master;
--disable_query_log
call mtr.add_suppression('Replica I/O: Get source BINLOG_CHECKSUM failed with error');
--enable_query_log
let $status_items= Master_User, Master_Host;
source include/show_slave_status.inc;

source include/stop_slave.inc;
--replace_column 2 ####
CHANGE REPLICATION SOURCE to SOURCE_USER='test';
source include/show_slave_status.inc;

reset slave;
source include/show_slave_status.inc;

--replace_column 2 ####
CHANGE REPLICATION SOURCE to SOURCE_USER='root';
source include/start_slave.inc;
sync_with_master;
source include/show_slave_status.inc;

# test of crash with temp tables & RESET SLAVE
# (test to see if RESET SLAVE clears temp tables in memory and disk)
source include/stop_slave.inc;
reset slave;
source include/start_slave.inc;
connection master;
create temporary table t1 (a int);
sync_slave_with_master;
source include/stop_slave.inc;
reset slave;
reset master; # clear GTIDs metadata so that create temporary table is replayed
source include/start_slave.inc;
sync_with_master;
show status like 'replica_open_temp_tables';
connection master;
drop temporary table if exists t1;
sync_slave_with_master;

#
#Bug#34654  	RESET SLAVE does not clear LAST_IO_Err* 
#

# clearing the status
source include/stop_slave.inc;
reset slave;
source include/check_slave_no_error.inc;

#
# verifying start slave resets Last_IO_Error and Last_IO_Errno.
#

--replace_column 2 ####
CHANGE REPLICATION SOURCE to SOURCE_USER='impossible_user_name';
start slave;
let $slave_io_errno= 1045;
--source include/wait_for_slave_io_error.inc
--source include/stop_slave_sql.inc

--replace_column 2 ####
CHANGE REPLICATION SOURCE to SOURCE_USER='root';
source include/start_slave.inc;
source include/check_slave_no_error.inc;

#
# verifying reset slave resets Last_{IO,SQL}_Err{or,no}
#

--echo
--echo Sync slave, else STOP SLAVE may complain about open temporary table.
--echo

--source include/rpl_connection_master.inc
--source include/sync_slave_sql_with_master.inc
--source include/stop_slave.inc

--replace_column 2 ####
CHANGE REPLICATION SOURCE to SOURCE_USER='impossible_user_name';
start slave;
let $slave_io_errno= 1045;
--source include/wait_for_slave_io_error.inc
--source include/stop_slave_sql.inc

reset slave;
source include/check_slave_no_error.inc;
--replace_column 2 ####
CHANGE REPLICATION SOURCE to SOURCE_USER='root';


#
# BUG#11809016 - NO WAY TO DISCOVER AN INSTANCE IS NO LONGER A SLAVE FOLLOWING MYSQL BUG#28796
#

reset slave;

--echo
--echo Sync slave, else STOP SLAVE may complain about open temporary table.
--echo

--source include/start_slave.inc
--source include/rpl_connection_master.inc
--source include/sync_slave_sql_with_master.inc

--source include/stop_slave.inc
--let $_slave_master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1)
--let $_slave_master_user= query_get_value(SHOW SLAVE STATUS, Master_User, 1)
--let $_slave_master_port= query_get_value(SHOW SLAVE STATUS, Master_Port, 1)

reset slave all;
--error ER_BAD_REPLICA
start slave;

--let $_show_master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1)
if ($_show_master_host != No such row)
{
  die;
}

--replace_result $_slave_master_host MASTER_HOST $_slave_master_user MASTER_USER $_slave_master_port MASTER_PORT
--replace_column 2 ####
--eval CHANGE REPLICATION SOURCE TO SOURCE_HOST= '$_slave_master_host', SOURCE_USER= '$_slave_master_user', SOURCE_PORT= $_slave_master_port
--source include/start_slave.inc

#
# Bug#27357189 MASTER_USER BECOMES 'TEST' IF IT IS EMPTY WHEN READ FROM REPO
#

# Clean all the previous info

# Sync with the master so we delete the temporary table before stop.
--source include/rpl_connection_master.inc
--source include/sync_slave_sql_with_master.inc

--source include/stop_slave.inc

--let $rpl_reset_slave_all= 1
--source include/rpl_reset_slave.inc

--echo # Configure the slave with an empty user

--replace_result $MASTER_MYPORT MASTER_PORT
--eval CHANGE REPLICATION SOURCE TO SOURCE_USER='', SOURCE_PORT=$MASTER_MYPORT, SOURCE_HOST='localhost'

--echo # Issue a RESET SLAVE instruction and try to start the slave IO thread that will error out

--let $rpl_reset_slave_all= 0
--source include/rpl_reset_slave.inc

START SLAVE IO_THREAD;

--let $slave_io_errno= convert_error(ER_REPLICA_FATAL_ERROR)
--source include/wait_for_slave_io_error.inc

--echo # Check the user is still empty

--let $_user= `SELECT user_name FROM mysql.slave_master_info`
--let $assert_cond= "$_user" = ""
--let $assert_text= User_name in slave_master_info is empty
--source include/assert.inc

--echo # Cleanup

--let $rpl_reset_slave_all= 1
--source include/rpl_reset_slave.inc

--replace_result $MASTER_MYPORT MASTER_PORT
--eval CHANGE REPLICATION SOURCE TO SOURCE_HOST='127.0.0.1', SOURCE_PORT=$MASTER_MYPORT, SOURCE_USER='root'
--source include/start_slave.inc

call mtr.add_suppression("Replica I/O for channel '': Fatal error: Invalid .* username when attempting to connect to the source server*");

--source include/rpl_end.inc