summaryrefslogtreecommitdiff
path: root/mysql-test/suite/innodb/t/innodb-multiple-tablespaces.test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/suite/innodb/t/innodb-multiple-tablespaces.test')
-rw-r--r--mysql-test/suite/innodb/t/innodb-multiple-tablespaces.test538
1 files changed, 538 insertions, 0 deletions
diff --git a/mysql-test/suite/innodb/t/innodb-multiple-tablespaces.test b/mysql-test/suite/innodb/t/innodb-multiple-tablespaces.test
new file mode 100644
index 00000000000..0b9d401475d
--- /dev/null
+++ b/mysql-test/suite/innodb/t/innodb-multiple-tablespaces.test
@@ -0,0 +1,538 @@
+#
+# These test make sure that tables are visible after rebooting
+#
+
+--source include/have_innodb.inc
+
+# Must have debug code to use SET SESSION debug
+--source include/have_debug.inc
+
+# Valgrind would complain about memory leaks when we crash on purpose.
+--source include/not_valgrind.inc
+
+# Embedded server does not support crashing
+--source include/not_embedded.inc
+
+# Avoid CrashReporter popup on Mac
+#--source include/not_crashrep.inc
+
+SET default_storage_engine=InnoDB;
+
+--disable_query_log
+let $MYSQLD_DATADIR= `select @@datadir`;
+let $data_directory = DATA DIRECTORY='$MYSQL_TMP_DIR/alt_dir';
+
+let $innodb_file_per_table=`select @@innodb_file_per_table`;
+let $innodb_file_format=`select @@innodb_file_format`;
+--enable_query_log
+
+--mkdir $MYSQL_TMP_DIR/alt_dir
+--mkdir $MYSQL_TMP_DIR/alt_dir/test
+--mkdir $MYSQL_TMP_DIR/new_dir
+--mkdir $MYSQL_TMP_DIR/new_dir/test
+
+--disable_query_log
+# These errors are expected in the error log for this test.
+call mtr.add_suppression("Could not find a valid tablespace file for");
+call mtr.add_suppression("Tablespace open failed for");
+call mtr.add_suppression("tablespace id and flags are");
+call mtr.add_suppression("but in the InnoDB data dictionary they are");
+call mtr.add_suppression("has been found in multiple places");
+call mtr.add_suppression("have been found in two places;");
+call mtr.add_suppression("Will not open the tablespace for");
+call mtr.add_suppression("Default location;");
+call mtr.add_suppression("Remote location;");
+call mtr.add_suppression("Dictionary location;");
+call mtr.add_suppression("Failed to find tablespace for table");
+call mtr.add_suppression("Attempt to open a tablespace previously opened");
+call mtr.add_suppression("A link file was found named");
+call mtr.add_suppression("but tablespace with that id or name does not exist.");
+--enable_query_log
+
+--echo #
+--echo # Test when tablespaces can be found at multiple places
+--echo # SYS_DATAFILES will refer to the file at alt_dir.
+--echo # Link File will refer to the file at new_dir.
+--echo # Tablename Default SYS_DATAFILES Link_File
+--echo # yyy Yes Yes Yes
+--echo # nyy No Yes Yes
+--echo # yny Yes No Yes
+--echo # yyn Yes Yes No
+--echo # nyw No Yes WrongFile
+--echo # nwy No WrongFile Yes
+--echo # wny WrongFile No Yes
+--echo # ynw Yes No WrongFile
+--echo # wyn WrongFile Yes No
+--echo # ywn Yes WrongFile No
+--echo # nnn No No No
+--echo # www WrongFile WrongFile WrongFile
+--echo # nolink No Yes, No ISL No
+--echo #
+
+set global innodb_file_per_table=on;
+set global innodb_file_format='Barracuda';
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE yyy (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO yyy VALUES (1, 'yyy');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE nyy (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO nyy VALUES (1, 'nyy');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE yny (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO yny VALUES (1, 'yny');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE yyn (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO yyn VALUES (1, 'yyn');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE nyw (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO nyw VALUES (1, 'nyw');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE nwy (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO nwy VALUES (1, 'nwy');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE wny (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO wny VALUES (1, 'wny');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE ynw (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO ynw VALUES (1, 'ynw');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE wyn (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO wyn VALUES (1, 'wyn');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE ywn (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO ywn VALUES (1, 'ywn');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE nnn (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO nnn VALUES (1, 'nnn');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE www (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO www VALUES (1, 'www');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE nolink (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO nolink VALUES (1, 'no link file');
+
+--echo #
+--echo # Shutdown the server, copy and remove files.
+--echo #
+--source include/shutdown_mysqld.inc
+--sleep 2
+
+--echo ---- MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test
+--echo ---- MYSQL_TMP_DIR/alt_dir/test
+--list_files $MYSQL_TMP_DIR/alt_dir/test
+--echo ---- MYSQL_TMP_DIR/new_dir/test
+--list_files $MYSQL_TMP_DIR/new_dir/test
+
+--echo # YYY; Tablespace found in 3 places
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yyy.ibd $MYSQLD_DATADIR/test/yyy.ibd
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yyy.ibd $MYSQL_TMP_DIR/new_dir/test/yyy.ibd
+--exec echo $MYSQL_TMP_DIR/new_dir/test/yyy.ibd > $MYSQLD_DATADIR/test/yyy.isl
+
+--echo # NYY; Tablespace found in alt_dir and new_dir
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/nyy.ibd $MYSQL_TMP_DIR/new_dir/test/nyy.ibd
+--exec echo $MYSQL_TMP_DIR/new_dir/test/nyy.ibd > $MYSQLD_DATADIR/test/nyy.isl
+
+--echo # YNY; Tablespace found in default and new_dir
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yny.ibd $MYSQLD_DATADIR/test/yny.ibd
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yny.ibd $MYSQL_TMP_DIR/new_dir/test/yny.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/yny.ibd
+--exec echo $MYSQL_TMP_DIR/new_dir/test/yny.ibd > $MYSQLD_DATADIR/test/yny.isl
+
+--echo # YYN; Tablespace found in default and alt_dir
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yyn.ibd $MYSQLD_DATADIR/test/yyn.ibd
+
+--echo # NYW; Copy the wrong file to new_dir
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yyy.ibd $MYSQL_TMP_DIR/new_dir/test/nyw.ibd
+--exec echo $MYSQL_TMP_DIR/new_dir/test/nyw.ibd > $MYSQLD_DATADIR/test/nyw.isl
+
+--echo # NWY; Copy the wrong file to alt_dir, good one to new_dir.
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/nwy.ibd $MYSQL_TMP_DIR/new_dir/test/nwy.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/nwy.ibd
+--exec echo $MYSQL_TMP_DIR/new_dir/test/nwy.ibd > $MYSQLD_DATADIR/test/nwy.isl
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yyy.ibd $MYSQL_TMP_DIR/alt_dir/test/nwy.ibd
+
+--echo # WNY; Copy the wrong file to default, good one to new_dir, delete it form alt_dir
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yyy.ibd $MYSQLD_DATADIR/test/wny.ibd
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/wny.ibd $MYSQL_TMP_DIR/new_dir/test/wny.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/wny.ibd
+--exec echo $MYSQL_TMP_DIR/new_dir/test/wny.ibd > $MYSQLD_DATADIR/test/wny.isl
+
+--echo # YNW; Copy the file to default, wrong one to new_dir, delete it form alt_dir
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/ynw.ibd $MYSQLD_DATADIR/test/ynw.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/ynw.ibd
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yyy.ibd $MYSQL_TMP_DIR/new_dir/test/ynw.ibd
+--exec echo $MYSQL_TMP_DIR/new_dir/test/ynw.ibd > $MYSQLD_DATADIR/test/ynw.isl
+
+--echo # WYN; Copy the wrong file to default
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yyy.ibd $MYSQLD_DATADIR/test/wyn.ibd
+
+--echo # YWN; Copy the file to default, wrong one to alt_dir
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/ywn.ibd $MYSQLD_DATADIR/test/ywn.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/ywn.ibd
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yyy.ibd $MYSQL_TMP_DIR/alt_dir/test/ywn.ibd
+
+--echo # NNN; Delete the tablespace and ISL
+--remove_file $MYSQLD_DATADIR/test/nnn.isl
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/nnn.ibd
+
+--echo # WWW; Put the wrong file in all three locations
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yyy.ibd $MYSQLD_DATADIR/test/www.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/www.ibd
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yyy.ibd $MYSQL_TMP_DIR/alt_dir/test/www.ibd
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yyy.ibd $MYSQL_TMP_DIR/new_dir/test/www.ibd
+--exec echo $MYSQL_TMP_DIR/new_dir/test/www.ibd > $MYSQLD_DATADIR/test/www.isl
+
+--echo # NOLINK; Delete the ISL file Since remote location is still in SYS_DATAFILES,
+--echo # it should still be found. And the ISL file should be re-created.
+--remove_file $MYSQLD_DATADIR/test/nolink.isl
+
+--echo # Make a backup of this tablespace to use later.
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/nolink.ibd $MYSQL_TMP_DIR/alt_dir/test/nolink.ibd.bak
+
+--echo ---- MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test
+--echo ---- MYSQL_TMP_DIR/alt_dir/test
+--list_files $MYSQL_TMP_DIR/alt_dir/test
+--echo ---- MYSQL_TMP_DIR/new_dir/test
+--list_files $MYSQL_TMP_DIR/new_dir/test
+
+--echo #
+--echo # Start the server and show the tablespaces.
+--echo #
+--source include/start_mysqld.inc
+
+--replace_result ./ MYSQLD_DATADIR/ $MYSQLD_DATADIR MYSQLD_DATADIR $MYSQL_TMP_DIR MYSQL_TMP_DIR
+SELECT path FROM information_schema.innodb_sys_datafiles
+ WHERE path LIKE '%test%' ORDER BY space;
+
+--error ER_NO_SUCH_TABLE
+SELECT * FROM yyy;
+--error ER_NO_SUCH_TABLE
+SELECT * FROM nyy;
+--error ER_NO_SUCH_TABLE
+SELECT * FROM yny;
+--error ER_NO_SUCH_TABLE
+SELECT * FROM yyn;
+SELECT * FROM nyw;
+SELECT * FROM nwy;
+SELECT * FROM wny;
+SELECT * FROM ynw;
+SELECT * FROM wyn;
+SELECT * FROM ywn;
+--error ER_NO_SUCH_TABLE
+SELECT * FROM nnn;
+--error ER_NO_SUCH_TABLE
+SELECT * FROM www;
+SELECT * FROM nolink;
+
+--error ER_NO_SUCH_TABLE
+SHOW CREATE TABLE yyy;
+--error ER_NO_SUCH_TABLE
+SHOW CREATE TABLE nyy;
+--error ER_NO_SUCH_TABLE
+SHOW CREATE TABLE yny;
+--error ER_NO_SUCH_TABLE
+SHOW CREATE TABLE yyn;
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+SHOW CREATE TABLE nyw;
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+SHOW CREATE TABLE nwy;
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+SHOW CREATE TABLE wny;
+SHOW CREATE TABLE ynw;
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+SHOW CREATE TABLE wyn;
+SHOW CREATE TABLE ywn;
+--error ER_NO_SUCH_TABLE
+SHOW CREATE TABLE nnn;
+--error ER_NO_SUCH_TABLE
+SHOW CREATE TABLE www;
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+SHOW CREATE TABLE nolink;
+
+--echo #
+--echo # List of files before DROP TABLES
+--echo #
+--echo ---- MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test
+--echo ---- MYSQL_TMP_DIR/alt_dir/test
+--list_files $MYSQL_TMP_DIR/alt_dir/test
+--echo ---- MYSQL_TMP_DIR/new_dir/test
+--list_files $MYSQL_TMP_DIR/new_dir/test
+
+--echo #
+--echo # Cleanup after restart
+--echo #
+
+DROP TABLE yyy;
+DROP TABLE nyy;
+DROP TABLE yny;
+DROP TABLE yyn;
+DROP TABLE nyw;
+DROP TABLE nwy;
+DROP TABLE wny;
+DROP TABLE ynw;
+DROP TABLE wyn;
+DROP TABLE ywn;
+DROP TABLE nnn;
+DROP TABLE www;
+DROP TABLE nolink;
+
+--echo #
+--echo # List of files not deleted by the DROP TABLES
+--echo #
+--echo ---- MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test
+--echo ---- MYSQL_TMP_DIR/alt_dir/test
+--list_files $MYSQL_TMP_DIR/alt_dir/test
+--echo ---- MYSQL_TMP_DIR/new_dir/test
+--list_files $MYSQL_TMP_DIR/new_dir/test
+
+--remove_file $MYSQLD_DATADIR/test/www.ibd
+--remove_file $MYSQLD_DATADIR/test/wny.ibd
+--remove_file $MYSQLD_DATADIR/test/wyn.ibd
+--remove_file $MYSQLD_DATADIR/test/yny.ibd
+--remove_file $MYSQLD_DATADIR/test/yyn.ibd
+--remove_file $MYSQLD_DATADIR/test/yyy.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/nwy.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/nyy.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/www.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/ywn.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/yyn.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/yyy.ibd
+--remove_file $MYSQL_TMP_DIR/new_dir/test/nyw.ibd
+--remove_file $MYSQL_TMP_DIR/new_dir/test/nyy.ibd
+--remove_file $MYSQL_TMP_DIR/new_dir/test/www.ibd
+--remove_file $MYSQL_TMP_DIR/new_dir/test/ynw.ibd
+--remove_file $MYSQL_TMP_DIR/new_dir/test/yny.ibd
+--remove_file $MYSQL_TMP_DIR/new_dir/test/yyy.ibd
+
+--echo #
+--echo # List of files after removing leftover files
+--echo #
+--echo ---- MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test
+--echo ---- MYSQL_TMP_DIR/alt_dir/test
+--list_files $MYSQL_TMP_DIR/alt_dir/test
+--echo ---- MYSQL_TMP_DIR/new_dir/test
+--list_files $MYSQL_TMP_DIR/new_dir/test
+
+--echo #
+--echo # Create some tables again and this time, crash instead of shutdown
+--echo # InnoDB recovery does not have the ability at this time to query
+--echo # the data dictionary in order to determine if the table it is
+--echo # openeing is the correct one, or to finde the previous location
+--echo # of a tablespace from SYS_DATAFILES. It must rely on the ISL file
+--echo # to tell the truth. But it can compare the current linked location
+--echo # with a tablespace found in the default location and use the most
+--echo # recent.
+--echo #
+--echo # Test recovery when tablespaces can be found at multiple places.
+--echo # SYS_DATAFILES is unavailable during recovery.
+--echo # Link File will refer to the file at alt_dir.
+--echo # In each case except the control tablespace, the Link file will
+--echo # exist with a file name in alt_dir. 'fnolink.ibd.bak' is the
+--echo # source of the 'wrong' tablespaces.
+--echo #
+--echo # Tablename Default_Tablespace Remote_Tablespace
+--echo # ny Yes Yes
+--echo # wy Wrong Yes
+--echo # yn Yes No
+--echo # yw Yes Wrong
+--echo # yy Yes Yes (both the same file)
+--echo #
+
+set global innodb_file_per_table=on;
+set global innodb_file_format='Barracuda';
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE ny (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO ny VALUES (1, 'ny');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE wy (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO wy VALUES (1, 'wy');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE yn (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO yn VALUES (1, 'yn');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE yw (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO yw VALUES (1, 'yw');
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE yy (c1 INT KEY, c2 TEXT) ENGINE=InnoDB $data_directory;
+INSERT INTO yy VALUES (1, 'yy');
+
+--echo #
+--echo # Crash the server, copy and remove files.
+--echo #
+BEGIN;
+INSERT INTO ny VALUES (2, 'ny');
+INSERT INTO wy VALUES (2, 'wy');
+INSERT INTO yn VALUES (2, 'yn');
+INSERT INTO yw VALUES (2, 'yw');
+INSERT INTO yy VALUES (2, 'yy');
+
+SELECT * FROM ny;
+SELECT * FROM wy;
+SELECT * FROM yn;
+SELECT * FROM yw;
+SELECT * FROM yy;
+
+# Request a crash on next execution of commit.
+SET SESSION debug="+d,crash_commit_before";
+--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+
+# Execute the statement that causes the crash.
+--error 2013
+COMMIT;
+--source include/wait_until_disconnected.inc
+--sleep 2
+
+--echo #
+--echo # Now that the engine is not running, move files around to test various scenarios.
+--echo #
+
+--echo # NY; Tablespace found in alt_dir but not the default directory.
+
+--echo # WY; The wrong tablespace is found in the default directory
+--echo # and the correct one in alt_dir.
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/nolink.ibd.bak $MYSQLD_DATADIR/test/wy.ibd
+
+--echo # YW; Tablespace is found in the default directory but the wrong file in alt_dir.
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yw.ibd $MYSQLD_DATADIR/test/yw.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/yw.ibd
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/nolink.ibd.bak $MYSQL_TMP_DIR/alt_dir/test/yw.ibd
+
+--echo # YN; Tablespace found the default directory but not in alt_dir.
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yn.ibd $MYSQLD_DATADIR/test/yn.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/yn.ibd
+
+--echo # YY; Found in both default directory and alt-dir.
+--copy_file $MYSQL_TMP_DIR/alt_dir/test/yy.ibd $MYSQLD_DATADIR/test/yy.ibd
+
+--echo ---- MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test
+--echo ---- MYSQL_TMP_DIR/alt_dir/test
+--list_files $MYSQL_TMP_DIR/alt_dir/test
+
+--echo #
+--echo # Start the server with innodb-force-recovery=1 so that it does not quit
+--echo # when it finds multiple possible locations for yy, wy and yw.
+--echo #
+--enable_reconnect
+--exec echo "restart:--innodb-force-recovery=1" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+--source include/wait_until_connected_again.inc
+--disable_reconnect
+
+SELECT * FROM ny;
+--error ER_NO_SUCH_TABLE
+SELECT * FROM wy;
+SELECT * FROM yn;
+--error ER_NO_SUCH_TABLE
+SELECT * FROM yw;
+--error ER_NO_SUCH_TABLE
+SELECT * FROM yy;
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+SHOW CREATE TABLE ny;
+--error ER_NO_SUCH_TABLE
+SHOW CREATE TABLE wy;
+SHOW CREATE TABLE yn;
+--error ER_NO_SUCH_TABLE
+SHOW CREATE TABLE yw;
+--error ER_NO_SUCH_TABLE
+SHOW CREATE TABLE yy;
+
+--replace_result ./ MYSQLD_DATADIR/ $MYSQLD_DATADIR MYSQLD_DATADIR $MYSQL_TMP_DIR MYSQL_TMP_DIR
+SELECT path FROM information_schema.innodb_sys_datafiles
+ WHERE path LIKE '%test%' ORDER BY space;
+
+--echo #
+--echo # Shutdown the server and remove extra tablespace files.
+--echo #
+--source include/shutdown_mysqld.inc
+--sleep 2
+
+--echo #
+--echo # List of files before removing unused files
+--echo #
+
+--echo ---- MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test
+--echo ---- MYSQL_TMP_DIR/alt_dir/test
+--list_files $MYSQL_TMP_DIR/alt_dir/test
+
+--remove_file $MYSQLD_DATADIR/test/ny.isl
+--remove_file $MYSQLD_DATADIR/test/wy.ibd
+--remove_file $MYSQLD_DATADIR/test/wy.isl
+--remove_file $MYSQLD_DATADIR/test/yn.ibd
+--remove_file $MYSQLD_DATADIR/test/yn.isl
+--remove_file $MYSQLD_DATADIR/test/yw.ibd
+--remove_file $MYSQLD_DATADIR/test/yw.isl
+--remove_file $MYSQLD_DATADIR/test/yy.ibd
+--remove_file $MYSQLD_DATADIR/test/yy.isl
+
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/nolink.ibd.bak
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/ny.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/wy.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/yw.ibd
+--remove_file $MYSQL_TMP_DIR/alt_dir/test/yy.ibd
+
+--echo #
+--echo # List of files before restart and DROP TABLES
+--echo #
+
+--echo ---- MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test
+--echo ---- MYSQL_TMP_DIR/alt_dir/test
+--list_files $MYSQL_TMP_DIR/alt_dir/test
+
+--echo #
+--echo # Start the server without using force_recover.
+--echo #
+--source include/start_mysqld.inc
+
+DROP TABLE ny;
+DROP TABLE wy;
+DROP TABLE yn;
+DROP TABLE yw;
+DROP TABLE yy;
+
+--echo #
+--echo # List of files after DROP TABLES
+--echo #
+--echo ---- MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test
+--echo ---- MYSQL_TMP_DIR/alt_dir/test
+--list_files $MYSQL_TMP_DIR/alt_dir/test
+
+--echo #
+--echo # Cleanup
+--echo #
+
+--rmdir $MYSQL_TMP_DIR/alt_dir/test
+--rmdir $MYSQL_TMP_DIR/alt_dir
+--rmdir $MYSQL_TMP_DIR/new_dir/test
+--rmdir $MYSQL_TMP_DIR/new_dir
+
+-- disable_query_log
+eval set global innodb_file_format=$innodb_file_format;
+eval set global innodb_file_per_table=$innodb_file_per_table;
+