summaryrefslogtreecommitdiff
path: root/mysql-test/include/load_dump_and_upgrade.inc
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/include/load_dump_and_upgrade.inc')
-rw-r--r--mysql-test/include/load_dump_and_upgrade.inc49
1 files changed, 49 insertions, 0 deletions
diff --git a/mysql-test/include/load_dump_and_upgrade.inc b/mysql-test/include/load_dump_and_upgrade.inc
new file mode 100644
index 00000000000..52351ea473c
--- /dev/null
+++ b/mysql-test/include/load_dump_and_upgrade.inc
@@ -0,0 +1,49 @@
+--source include/have_innodb.inc
+
+# ==== Usage ====
+#
+# [--let $old_version= 10.2]
+# --source include/load_dump_and_upgrade.inc
+
+# Dumps stored in std_data as mysql_database_<old_version>.dump
+# were pre-created by running mysqldump for `mysql` database
+# on a freshly boostrapped instance of the corresponding version.
+# On 10.4 the local root was additionally given an empty password,
+# to avoid using unix_socket.
+
+# Backup the existing mysql schema, to restore it later
+--exec $MYSQL_DUMP mysql > $MYSQL_TMP_DIR/mysql_database_backup
+
+--echo #
+--echo # Upgrade from version $old_version
+--echo #
+
+# Workaround for MDEV-22127 (can't import database dump created before 10.4)
+# The most universal workaround suggested in the item is running
+# DROP TABLE IF EXISTS `mysql`.`global_priv`;
+# DROP VIEW IF EXISTS `mysql`.`user`;
+# before the upgrade. For this test, it is better than creating the dumps
+# with --add-drop-database, because
+# a) it won't require re-creating the dump when the bug is fixed;
+# b) it won't hide possible unrelated problems;
+# c) add-drop-database doesn't work with logging into tables enabled (MDEV-4875 and more)
+
+--exec $MYSQL -e "DROP TABLE IF EXISTS mysql.global_priv; DROP VIEW IF EXISTS mysql.user"
+
+--echo # Loading dump of $old_version mysql schema
+--exec $MYSQL mysql < $MYSQLTEST_VARDIR/std_data/mysql_database_$old_version.dump
+
+--echo # Running mysql_upgrade
+--exec $MYSQL_UPGRADE --verbose > $MYSQL_TMP_DIR/upgrade.log
+
+--echo # Checking that mysql.user is accessible and returns some data
+SELECT COUNT(*) > 0 AS `mysql.user has data` FROM mysql.user;
+
+# Restore the backup of mysql schema
+--exec $MYSQL mysql < $MYSQL_TMP_DIR/mysql_database_backup
+
+--let $ddir= `select @@datadir`
+
+# It will fail if the file doesn't exist, which is good,
+# which is an extra check that it was written
+--remove_file $ddir/mysql_upgrade_info