1# WL 13352: Create partitioned tables for upgrade and zip file 2# Generates $MYSQLTEST_VARDIR/std_data/upgrade/data_wl13352_$OLD_VERSION.zip.new 3# extn_wl13352_$OLD_VERSION.zip.new 4# This zip file needs to be updated to the version to upgrade to 5# mysql-test/std_data/upgrade/data_wl13352_$OLD_VERSION.zip 6# extn_wl13352_$OLD_VERSION.zip 7# Works for version 5.7.27, 8.0.13, 8.0.15, 8.0.17, 8.0.19 8# 9# To run it in 5.7 version copy following files in 5.7 10# 1. mysql-test/suite/innodb/t/partition_upgrade_create.test 11# - Search and comment out all #--force-rmdir 12# 2. mysql-test/suite/innodb/include/partition_upgrade_check.inc 13# - Search and comment out all #--copy_files_wildcard 14# - Comment out SET NAMES utf8mb4 COLLATE utf8mb4_0900_as_cs 15# - Change information_schema.innodb_tables, innodb_tablespaces to 16# innodb_sys_tables, innodb_sys_tablespaces 17# 3. mysql-test/suite/innodb/r/partition_upgrade_create.result 18# - Note the difference in result 19# To run it in other versions (8.0.*) copy the same files. Only 20# result file would need to change. 21 22--echo # Test to create schema for Upgrade in old version 23 24# Disable for creating zip files in other platforms 25--source include/linux.inc 26--source include/have_case_sensitive_file_system.inc 27 28# If you set $NO_EXPORT, $NO_EXT_PATH, $IS_FIXED_PATH, the same 29# needs to be set in partition_import.inc and partition_upgrade.inc 30# for running upgrade and import. 31 32# To disable exporting tablespace 33# --let $NO_EXPORT = 1 34 35# To disable external file path 36# --let $NO_EXT_PATH = 1 37 38# To Enable fixed path for external files 39# --let $IS_FIXED_PATH = 1 40 41# To enable platform and lctn extension [8019, 5727] 42--let HAVE_PLATFORM_LCTN_EXTN = 1 43 44# To enable upper case table, tablespace name [8019, 5727] 45--let EXTRA_TABLES = 1 46 47--let $MYSQLD_DATADIR= `select @@datadir` 48--let $EXTERNAL_DIR_NAME= mysql_wl13352_data 49 50# For manual upgrade testing with absolute path to match across setup 51if ($IS_FIXED_PATH) 52{ 53 --let $EXTERNAL_DIRECTORY = /tmp/$EXTERNAL_DIR_NAME/ 54} 55 56if (!$IS_FIXED_PATH) 57{ 58 --let $EXTERNAL_DIRECTORY = $MYSQL_TMP_DIR/tmp/$EXTERNAL_DIR_NAME/ 59} 60 61# Add entries for more versions if needed 62select case when @@version like "5.7.27%" then '5727' 63 when @@version like "8.0.13%" then '8013' 64 when @@version like "8.0.15%" then '8015' 65 when @@version like "8.0.17%" then '8017' 66 when @@version like "8.0.19%" then '8019' 67 else 'none' end as VERSION into @current_server_version; 68 69--let $OLD_VERSION= `select @current_server_version` 70--let $VERSION_STR= `select @@version` 71--let $IS_57= `select case when @@version like "5.7%" then 1 else 0 end` 72--let $IS_8019= `select case when @@version like "8.0.19%" then 1 else 0 end` 73 74# By default skip external directory for 5.7 75if ($IS_57) 76{ 77 --let $NO_EXPORT = 1 78 --let $NO_EXT_PATH = 1 79} 80 81--let $OLD_EXTN = $OLD_VERSION 82 83if ($HAVE_PLATFORM_LCTN_EXTN) { 84 85 --let $OLD_LCTN = `select @@lower_case_table_names` 86 87 if (`select convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows") = 1`) 88 { 89 --let $OLD_PLATFORM = _win_lctn_ 90 } 91 92 if (`select convert(@@version_compile_os using latin1) IN ("Linux") = 1`) 93 { 94 --let $OLD_PLATFORM = _lin_lctn_ 95 } 96 97 if (`select convert(@@version_compile_os using latin1) RLIKE '^(osx|macos)' = 1`) 98 { 99 --let $OLD_PLATFORM = _mac_lctn_ 100 } 101 102 --let $OLD_EXTN = $OLD_VERSION$OLD_PLATFORM$OLD_LCTN 103} 104 105--echo # Starting server with keyring plugin 106--let $restart_parameters = restart: --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT 107 108if (!$NO_EXT_PATH) 109{ 110 if (!$IS_57) 111 { 112 # Cleanup external directory 113 --error 0, 1 114 --force-rmdir $EXTERNAL_DIRECTORY 115 116 --let $restart_parameters = restart: --innodb_directories=$EXTERNAL_DIRECTORY --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT 117 } 118 119 if ($IS_57) 120 { 121 # Cleanup external directory 122 --error 0, 1 123 --rmdir $EXTERNAL_DIRECTORY/test 124 125 --error 0, 1 126 --rmdir $EXTERNAL_DIRECTORY 127 } 128} 129 130--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH $KEYRING_PLUGIN keyring_file.so $EXTERNAL_DIRECTORY /tmp/mysql_wl13352_data/ 131--source include/restart_mysqld.inc 132 133--echo 134--echo # A. Create tables for upgrade and fill data 135 136--let $check_option = CREATE 137--source suite/innodb/include/partition_upgrade_check.inc 138 139if (!$NO_EXPORT) 140{ 141 --let $EXPORT_DIRECTORY = $MYSQL_TMP_DIR/data_export 142 --mkdir $EXPORT_DIRECTORY 143 144 --echo 145 --echo # Export table partitions 146 --let $check_option = EXPORT 147 --source suite/innodb/include/partition_upgrade_check.inc 148} 149 150--echo 151--echo # Check table metadata and data 152--let $check_option = CHECK 153--source suite/innodb/include/partition_upgrade_check.inc 154 155--echo 156--echo # Stop DB server which was created by MTR default 157--source include/shutdown_mysqld.inc 158 159if ($IS_57) 160{ 161 --mkdir $MYSQLTEST_VARDIR/std_data/upgrade 162} 163 164--echo # Copy and zip old version data directory. 165--exec ln -s $MYSQLD_DATADIR data_upgrade 166--exec zip -qr $MYSQL_TMP_DIR/data_upgrade.zip data_upgrade 167--file_exists $MYSQL_TMP_DIR/data_upgrade.zip 168--move_file $MYSQL_TMP_DIR/data_upgrade.zip $MYSQLTEST_VARDIR/std_data/upgrade/data_wl13352_$OLD_EXTN.zip.new 169--remove_file data_upgrade 170 171if (!$NO_EXPORT) 172{ 173 --echo # Copy and zip old version exported partitions. 174 --exec ln -s $EXPORT_DIRECTORY data_export 175 --exec zip -qr $MYSQL_TMP_DIR/data_export.zip data_export 176 --file_exists $MYSQL_TMP_DIR/data_export.zip 177 --move_file $MYSQL_TMP_DIR/data_export.zip $MYSQLTEST_VARDIR/std_data/upgrade/export_wl13352_$OLD_EXTN.zip.new 178 --remove_file data_export 179} 180 181if (!$NO_EXT_PATH) { 182 --echo # Copy and zip old version external directory. 183 184 if ($IS_FIXED_PATH) 185 { 186 --exec zip -qr $MYSQL_TMP_DIR/data_external.zip $EXTERNAL_DIRECTORY 187 --file_exists $MYSQL_TMP_DIR/data_external.zip 188 --move_file $MYSQL_TMP_DIR/data_external.zip $MYSQLTEST_VARDIR/std_data/upgrade/extn_wl13352_$OLD_EXTN.zip.new 189 } 190 191 if (!$IS_FIXED_PATH) 192 { 193 --exec ln -s $MYSQL_TMP_DIR/tmp tmp 194 --exec zip -qr $MYSQL_TMP_DIR/data_external.zip tmp/$EXTERNAL_DIR_NAME 195 --file_exists $MYSQL_TMP_DIR/data_external.zip 196 --move_file $MYSQL_TMP_DIR/data_external.zip $MYSQLTEST_VARDIR/std_data/upgrade/extn_wl13352_$OLD_EXTN.zip.new 197 --remove_file tmp 198 } 199} 200 201--echo # Cleanup: Restart with default options. 202let $restart_parameters =; 203--source include/start_mysqld.inc 204--echo 205--echo # Drop all tables created for upgrade 206--let $check_option = DROP 207--source suite/innodb/include/partition_upgrade_check.inc 208 209if (!$NO_EXPORT) 210{ 211 if ($IS_57) 212 { 213 --rmdir $EXPORT_DIRECTORY 214 } 215 216 if (!$IS_57) 217 { 218 --force-rmdir $EXPORT_DIRECTORY 219 } 220} 221 222if (!$NO_EXT_PATH) 223{ 224 if ($IS_57) 225 { 226 --rmdir $EXTERNAL_DIRECTORY/test 227 --rmdir $EXTERNAL_DIRECTORY 228 229 if (!$IS_ABSOLUTE_PATH) 230 { 231 --rmdir $MYSQL_TMP_DIR/tmp 232 } 233 } 234 235 if (!$IS_57) 236 { 237 --force-rmdir $EXTERNAL_DIRECTORY 238 239 if (!$IS_FIXED_PATH) 240 { 241 --force-rmdir $MYSQL_TMP_DIR/tmp 242 } 243 } 244} 245 246--remove_file $MYSQL_TMP_DIR/mysecret_keyring 247 248--disable_query_log 249call mtr.add_suppression("\\[Warning\\].* The datafile '.*' for tablespace .* is in an unprotected location. This file cannot be recovered after a crash until this location is added to innodb_directories"); 250--enable_query_log 251