summaryrefslogtreecommitdiff
path: root/mysql-test/main/rpl_mysql_upgrade_slave_repo_check.test
blob: f91cbaa36ea8d0f09d429bd5c34fc90f20648a75 (plain)
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
# ==== Purpose ====
#
# While upgrading from "mysql" to "mariadb" if slave info repositories are
# configured to be tables then appropriate warnings should be reported.
#
# ==== Implementation ====
#
# Steps:
#    1 - On MariaDB server create `mysql`.`slave_master_info` and
#        `mysql.slave_relay_log_info` tables to simulate upgrade from "mysql"
#        to "mariadb" server. Insert data into these tables.
#    2 - Execute "mysql_upgrade" script and verify that appropriate warning
#        is reported. i.e Warning is to alert user that the data present in
#        repository tables will be ignored.
#    3 - Truncate these tables. This simulates repositories being file and
#        the tables are empty.
#    4 - Execute "mysql_upgrade" script and verify that no warnings are
#        reported.
#
# ==== References ====
#
# MDEV-10047: table-based master info repository
#

--source include/have_innodb.inc
--source include/mysql_upgrade_preparation.inc
--source include/have_binlog_format_mixed.inc
--source include/master-slave.inc

--write_file $MYSQLTEST_VARDIR/tmp/slave_table_repo_init.sql
--disable_query_log
--disable_result_log
SET SQL_LOG_BIN=0;
# Table structure extracted from MySQL-5.6.47
CREATE TABLE `mysql`.`slave_master_info` (
  `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file.',
  `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log currently being read from the master.',
  `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last read event.',
  `Host` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'The host name of the master.',
  `User_name` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The user name used to connect to the master.',
  `User_password` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The password used to connect to the master.',
  `Port` int(10) unsigned NOT NULL COMMENT 'The network port used to connect to the master.',
  `Connect_retry` int(10) unsigned NOT NULL COMMENT 'The period (in seconds) that the slave will wait before trying to reconnect to the master.',
  `Enabled_ssl` tinyint(1) NOT NULL COMMENT 'Indicates whether the server supports SSL connections.',
  `Ssl_ca` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.',
  `Ssl_capath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path to the Certificate Authority (CA) certificates.',
  `Ssl_cert` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL certificate file.',
  `Ssl_cipher` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the cipher in use for the SSL connection.',
  `Ssl_key` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL key file.',
  `Ssl_verify_server_cert` tinyint(1) NOT NULL COMMENT 'Whether to verify the server certificate.',
  `Heartbeat` float NOT NULL,
  `Bind` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Displays which interface is employed when connecting to the MySQL server',
  `Ignored_server_ids` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The number of server IDs to be ignored, followed by the actual server IDs',
  `Uuid` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The master server uuid.',
  `Retry_count` bigint(20) unsigned NOT NULL COMMENT 'Number of reconnect attempts, to the master, before giving up.',
  `Ssl_crl` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Revocation List (CRL)',
  `Ssl_crlpath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path used for Certificate Revocation List (CRL) files',
  `Enabled_auto_position` tinyint(1) NOT NULL COMMENT 'Indicates whether GTIDs will be used to retrieve events from the master.',
  PRIMARY KEY (`Host`,`Port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Master Information';

INSERT INTO `mysql`.`slave_master_info` VALUES (23,'master-bin.000001', 120, 'localhost', 'root'," ", 13000, 60, 0," "," "," "," "," ",0 , 60," ", " ", '28e10fdd-6289-11ea-aab9-207918567a34',10," "," ", 0 );

# Table structure extracted from MySQL-5.6.47
CREATE TABLE `mysql`.`slave_relay_log_info` (
  `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.',
  `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.',
  `Relay_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The relay log position of the last executed event.',
  `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.',
  `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last executed event.',
  `Sql_delay` int(11) NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.',
  `Number_of_workers` int(10) unsigned NOT NULL,
  `Id` int(10) unsigned NOT NULL COMMENT 'Internal Id that uniquely identifies this record.',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Relay Log Information';

INSERT INTO `mysql`.`slave_relay_log_info` VALUES (7,'./slave-relay-bin.000001',4 ," ",0, 0 ,0 , 1);
SET SQL_LOG_BIN=1;
--enable_query_log
--enable_result_log
EOF

--echo ********************************************************************
--echo * Test case1: Upgrade when repository tables have data.            *
--echo * mysql_upgrade script should report warnings.                     *
--echo ********************************************************************
--connection master
--source $MYSQLTEST_VARDIR/tmp/slave_table_repo_init.sql
--exec $MYSQL_UPGRADE --skip-verbose --force --user=root > $MYSQLTEST_VARDIR/log/mysql_upgrade_master.log 2>&1
--cat_file $MYSQLTEST_VARDIR/log/mysql_upgrade_master.log

--connection slave
--source $MYSQLTEST_VARDIR/tmp/slave_table_repo_init.sql
--exec $MYSQL_UPGRADE --skip-verbose --force --user=root > $MYSQLTEST_VARDIR/log/mysql_upgrade_slave.log 2>&1
--cat_file $MYSQLTEST_VARDIR/log/mysql_upgrade_slave.log

--connection master
let $datadir= `select @@datadir`;
remove_file $datadir/mariadb_upgrade_info;
TRUNCATE TABLE `mysql`.`slave_master_info`;
TRUNCATE TABLE `mysql`.`slave_relay_log_info`;
--remove_file $MYSQLTEST_VARDIR/log/mysql_upgrade_master.log
--remove_file $MYSQLTEST_VARDIR/log/mysql_upgrade_slave.log

--echo ********************************************************************
--echo * Test case2: Upgrade when repository tables are empty.            *
--echo * mysql_upgrade script should not report any warning.              *
--echo ********************************************************************
--connection master
--exec $MYSQL_UPGRADE --skip-verbose --force --user=root > $MYSQLTEST_VARDIR/log/mysql_upgrade_master.log 2>&1
--cat_file $MYSQLTEST_VARDIR/log/mysql_upgrade_master.log

--connection slave
--exec $MYSQL_UPGRADE --skip-verbose --force --user=root > $MYSQLTEST_VARDIR/log/mysql_upgrade_slave.log 2>&1
--cat_file $MYSQLTEST_VARDIR/log/mysql_upgrade_slave.log

--echo "====== Clean up ======"
--connection master
let $datadir= `select @@datadir`;
remove_file $datadir/mariadb_upgrade_info;
DROP TABLE `mysql`.`slave_master_info`, `mysql`.`slave_relay_log_info`;

--remove_file $MYSQLTEST_VARDIR/tmp/slave_table_repo_init.sql
--remove_file $MYSQLTEST_VARDIR/log/mysql_upgrade_master.log
--remove_file $MYSQLTEST_VARDIR/log/mysql_upgrade_slave.log

--source include/rpl_end.inc