# ==== 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/mysql_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/mysql_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