polardbxengine/mysql-test/suite/innodb/t/alter_missing_tablespace.test

439 lines
14 KiB
Plaintext

--echo #
--echo # ALLOW IN-PLACE DDL OPERATIONS ON MISSING AND/OR DISCARDED TABLESPACES
--echo #
let $MYSQLD_DATADIR=`select @@datadir`;
SET GLOBAL innodb_file_per_table=1;
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, INDEX(c2));
INSERT INTO t1 VALUES (1, 1, 'one'), (2, 2, 'two'), (3, 3, 'three');
CREATE TABLE t2 (c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, INDEX(c2));
INSERT INTO t2 VALUES (1, 1, 'one'), (2, 2, 'two'), (3, 3, 'three');
CREATE TABLE t3 (c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, INDEX(c2));
INSERT INTO t3 VALUES (1, 1, 'one'), (2, 2, 'two'), (3, 3, 'three');
CREATE TABLE t4 (c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, INDEX(c2));
INSERT INTO t4 VALUES (1, 1, 'one'), (2, 2, 'two'), (3, 3, 'three');
--echo # Check also with tables having special characters
CREATE TABLE `t_.._a` (c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, INDEX(c2));
INSERT INTO `t_.._a` VALUES (1, 1, 'one'), (2, 2, 'two'), (3, 3, 'three');
CREATE TABLE `t_.._b` (c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, INDEX(c2));
INSERT INTO `t_.._b` VALUES (1, 1, 'one'), (2, 2, 'two'), (3, 3, 'three');
--echo #
--echo # Remove and Discard tablespaces
--echo #
--source include/shutdown_mysqld.inc
--remove_file $MYSQLD_DATADIR/test/t1.ibd
--remove_file $MYSQLD_DATADIR/test/t2.ibd
--remove_file $MYSQLD_DATADIR/test/t_@002e@002e_a.ibd
--source include/start_mysqld.inc
ALTER TABLE t3 DISCARD TABLESPACE;
ALTER TABLE t4 DISCARD TABLESPACE;
ALTER TABLE `t_.._b` DISCARD TABLESPACE;
--echo #
--echo # SELECT * FROM __
--echo #
# The ER_NO_SUCH_TABLE is being thrown by ha_innobase::open().
# The table does exist, only the tablespace does not exist.
--error ER_TABLESPACE_MISSING
SELECT * FROM t1;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
SELECT * FROM t2;
SHOW WARNINGS;
--error ER_TABLESPACE_DISCARDED
SELECT * FROM t3;
SHOW WARNINGS;
--error ER_TABLESPACE_DISCARDED
SELECT * FROM t4;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
SELECT * FROM `t_.._a`;
SHOW WARNINGS;
--error ER_TABLESPACE_DISCARDED
SELECT * FROM `t_.._b`;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ TABLESPACE innodb_system
--echo #
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 TABLESPACE innodb_system, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 TABLESPACE innodb_system, ALGORITHM=COPY;
SHOW WARNINGS;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t3 TABLESPACE innodb_system, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 TABLESPACE innodb_system, ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ TABLESPACE ts1
--echo #
CREATE TABLESPACE ts1 ADD DATAFILE 'ts1.ibd';
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 TABLESPACE ts1, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 TABLESPACE ts1, ALGORITHM=COPY;
SHOW WARNINGS;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t3 TABLESPACE ts1, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 TABLESPACE ts1, ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ ADD INDEX
--echo #
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 ADD INDEX (a), ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 ADD INDEX (a), ALGORITHM=COPY;
SHOW WARNINGS;
--error ER_KEY_COLUMN_DOES_NOT_EXITS
ALTER TABLE t3 ADD INDEX (a), ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_KEY_COLUMN_DOES_NOT_EXITS
ALTER TABLE t4 ADD INDEX (a), ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ DROP INDEX
--echo #
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 DROP INDEX c2, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 DROP INDEX c2, ALGORITHM=COPY;
SHOW WARNINGS;
ALTER TABLE t3 DROP INDEX c2, ALGORITHM=INPLACE;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 DROP INDEX c2, ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ ADD COLUMN
--echo #
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 ADD COLUMN c3 INT, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 ADD COLUMN c3 INT, ALGORITHM=COPY;
SHOW WARNINGS;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t3 ADD COLUMN c3 INT, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 ADD COLUMN c3 INT, ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ DROP COLUMN
--echo #
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 DROP COLUMN ct, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 DROP COLUMN ct, ALGORITHM=COPY;
SHOW WARNINGS;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t3 DROP COLUMN ct, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 DROP COLUMN ct, ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ ALTER c2 DROP DEFAULT
--echo #
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 ALTER c2 DROP DEFAULT, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 ALTER c2 DROP DEFAULT, ALGORITHM=COPY;
SHOW WARNINGS;
ALTER TABLE t3 ALTER c2 DROP DEFAULT, ALGORITHM=INPLACE;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 ALTER c2 DROP DEFAULT, ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ ALTER c2 SET DEFAULT 42
--echo #
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 ALTER c2 SET DEFAULT 42, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 ALTER c2 SET DEFAULT 42, ALGORITHM=COPY;
SHOW WARNINGS;
ALTER TABLE t3 ALTER c2 SET DEFAULT 42, ALGORITHM=INPLACE;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 ALTER c2 SET DEFAULT 42, ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ ADD FULLTEXT INDEX
--echo #
#--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 ADD FULLTEXT INDEX (ct), ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 ADD FULLTEXT INDEX (ct), ALGORITHM=COPY;
SHOW WARNINGS;
ALTER TABLE t3 ADD FULLTEXT INDEX (ct), ALGORITHM=INPLACE;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 ADD FULLTEXT INDEX (ct), ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ CHANGE c2 c2 INT AFTER c1
--echo #
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 CHANGE c2 c2 INT AFTER c1, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 CHANGE c2 c2 INT AFTER c1, ALGORITHM=COPY;
SHOW WARNINGS;
ALTER TABLE t3 CHANGE c2 c2 INT AFTER c1, ALGORITHM=INPLACE;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 CHANGE c2 c2 INT AFTER c1, ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ CHANGE c1 c1 INT FIRST
--echo #
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 CHANGE c1 c1 INT FIRST, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 CHANGE c1 c1 INT FIRST, ALGORITHM=COPY;
SHOW WARNINGS;
ALTER TABLE t3 CHANGE c1 c1 INT FIRST, ALGORITHM=INPLACE;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 CHANGE c1 c1 INT FIRST, ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ CHANGE c2 c3 INT
--echo #
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 CHANGE c2 c3 INT, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 CHANGE c2 c3 INT, ALGORITHM=COPY;
SHOW WARNINGS;
ALTER TABLE t3 CHANGE c2 c3 INT, ALGORITHM=INPLACE;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 CHANGE c2 c3 INT, ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ ROW_FORMAT=REDUNDANT
--echo #
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 ROW_FORMAT=REDUNDANT, ALGORITHM=COPY;
SHOW WARNINGS;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
ALTER TABLE t3 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 ROW_FORMAT=REDUNDANT, ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ RENAME TO __
--echo #
--error ER_TABLESPACE_MISSING
ALTER TABLE t1 RENAME TO t11, ALGORITHM=INPLACE;
SHOW WARNINGS;
--error ER_TABLESPACE_MISSING
ALTER TABLE t2 RENAME TO t22, ALGORITHM=COPY;
SHOW WARNINGS;
ALTER TABLE t3 RENAME TO t33, ALGORITHM=INPLACE;
ALTER TABLE t33 RENAME TO t3, ALGORITHM=INPLACE;
--error ER_TABLESPACE_DISCARDED
ALTER TABLE t4 RENAME TO t44, ALGORITHM=COPY;
SHOW WARNINGS;
--echo #
--echo # DISCARD an already missing tablespace;
--echo #
ALTER TABLE t1 DISCARD TABLESPACE;
--echo #
--echo # Show the resultant tables before dropping them
--echo #
SHOW CREATE TABLE t1;
--error ER_TABLESPACE_MISSING
SHOW CREATE TABLE t2;
SHOW WARNINGS;
SHOW CREATE TABLE t3;
SHOW CREATE TABLE t4;
--error ER_TABLESPACE_MISSING
SHOW CREATE TABLE `t_.._a`;
SHOW WARNINGS;
SHOW CREATE TABLE `t_.._b`;
--echo #
--echo # DROP TABLE __ while mising or discarded
--echo #
DROP TABLE t1;
DROP TABLE t2;
DROP TABLE t3;
DROP TABLE t4;
DROP TABLE `t_.._a`;
DROP TABLE `t_.._b`;
--echo #
--echo # Recreate the 6 tables; 1 & 2 missing, 3 & 4 discarded, 5 & 6 normal
--echo #
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, INDEX(c2));
CREATE TABLE t2 (c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, INDEX(c2));
CREATE TABLE t3 (c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, INDEX(c2));
CREATE TABLE t4 (c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, INDEX(c2));
CREATE TABLE t5 (c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, INDEX(c2));
CREATE TABLE t6 (c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, INDEX(c2));
INSERT INTO t1 VALUES (1, 1, 'one'), (2, 2, 'two'), (3, 3, 'three');
INSERT INTO t2 VALUES (1, 1, 'one'), (2, 2, 'two'), (3, 3, 'three');
INSERT INTO t3 VALUES (1, 1, 'one'), (2, 2, 'two'), (3, 3, 'three');
INSERT INTO t4 VALUES (1, 1, 'one'), (2, 2, 'two'), (3, 3, 'three');
INSERT INTO t5 VALUES (1, 1, 'one'), (2, 2, 'two'), (3, 3, 'three');
INSERT INTO t6 VALUES (1, 1, 'one'), (2, 2, 'two'), (3, 3, 'three');
CREATE TABLE t1p LIKE t1;
CREATE TABLE t2p LIKE t1;
CREATE TABLE t3p LIKE t1;
CREATE TABLE t4p LIKE t1;
CREATE TABLE t5p LIKE t1;
CREATE TABLE t6p LIKE t1;
--echo #
--echo # Remove t1 and Discard t3 & t4
--echo #
--source include/shutdown_mysqld.inc
--remove_file $MYSQLD_DATADIR/test/t1.ibd
--source include/start_mysqld.inc
ALTER TABLE t3 DISCARD TABLESPACE;
ALTER TABLE t4 DISCARD TABLESPACE;
--echo #
--echo # Add some foreign key constraints
--echo #
CREATE TABLE t1c (c1 INT PRIMARY KEY, c2 INT, c3 INT, INDEX(c2), INDEX(c3),
CONSTRAINT t1c2 FOREIGN KEY (c2) REFERENCES t1(c2),
CONSTRAINT t1c3 FOREIGN KEY (c3) REFERENCES t1p(c2));
CREATE TABLE t2c (c1 INT PRIMARY KEY, c2 INT, c3 INT, INDEX(c2), INDEX(c3),
CONSTRAINT t2c2 FOREIGN KEY (c2) REFERENCES t2(c2),
CONSTRAINT t2c3 FOREIGN KEY (c3) REFERENCES t2p(c2));
CREATE TABLE t3c (c1 INT PRIMARY KEY, c2 INT, c3 INT, INDEX(c2), INDEX(c3),
CONSTRAINT t3c2 FOREIGN KEY (c2) REFERENCES t3(c2),
CONSTRAINT t3c3 FOREIGN KEY (c3) REFERENCES t3p(c2));
CREATE TABLE t4c (c1 INT PRIMARY KEY, c2 INT, c3 INT, INDEX(c2), INDEX(c3),
CONSTRAINT t4c2 FOREIGN KEY (c2) REFERENCES t4(c2),
CONSTRAINT t4c3 FOREIGN KEY (c3) REFERENCES t4p(c2));
CREATE TABLE t5c (c1 INT PRIMARY KEY, c2 INT, c3 INT, INDEX(c2), INDEX(c3),
CONSTRAINT t5c2 FOREIGN KEY (c2) REFERENCES t5(c2),
CONSTRAINT t5c3 FOREIGN KEY (c3) REFERENCES t5p(c2));
CREATE TABLE t6c (c1 INT PRIMARY KEY, c2 INT, c3 INT, INDEX(c2), INDEX(c3),
CONSTRAINT t6c2 FOREIGN KEY (c2) REFERENCES t6(c2),
CONSTRAINT t6c3 FOREIGN KEY (c3) REFERENCES t6p(c2));
--echo #
--echo # Remove t2, try to discard t3 & t4 already discarded
--echo #
--source include/shutdown_mysqld.inc
--remove_file $MYSQLD_DATADIR/test/t2.ibd
--source include/start_mysqld.inc
--error ER_ROW_IS_REFERENCED_2
ALTER TABLE t3 DISCARD TABLESPACE;
SHOW WARNINGS;
--error ER_ROW_IS_REFERENCED_2
ALTER TABLE t4 DISCARD TABLESPACE;
SHOW WARNINGS;
--error ER_ROW_IS_REFERENCED_2
ALTER TABLE t5 DISCARD TABLESPACE;
SHOW WARNINGS;
--echo #
--echo # ALTER TABLE __ DROP FOREIGN KEY
--echo #
ALTER TABLE t1c DROP FOREIGN KEY t1c2, ALGORITHM=INPLACE;
ALTER TABLE t2c DROP FOREIGN KEY t2c2, ALGORITHM=COPY;
ALTER TABLE t3c DROP FOREIGN KEY t3c2, ALGORITHM=INPLACE;
ALTER TABLE t4c DROP FOREIGN KEY t4c2, ALGORITHM=COPY;
ALTER TABLE t5c DROP FOREIGN KEY t5c2, ALGORITHM=INPLACE;
ALTER TABLE t6c DROP FOREIGN KEY t6c2, ALGORITHM=COPY;
--echo #
--echo # Cleanup
--echo #
DROP TABLE t1;
DROP TABLE t2;
DROP TABLE t3;
DROP TABLE t4;
DROP TABLE t5;
DROP TABLE t6;
DROP TABLE t1c;
DROP TABLE t2c;
DROP TABLE t3c;
DROP TABLE t4c;
DROP TABLE t5c;
DROP TABLE t6c;
DROP TABLE t1p;
DROP TABLE t2p;
DROP TABLE t3p;
DROP TABLE t4p;
DROP TABLE t5p;
DROP TABLE t6p;
DROP TABLESPACE ts1;
--disable_query_log
call mtr.add_suppression("\\[Warning\\] .*MY-\\d+.* Tablespace for table `test`.`.*` is set as discarded");
call mtr.add_suppression("\\[Warning\\] .*MY-\\d+.* Tablespace .*, name '.*', file '.*' is missing");
call mtr.add_suppression("\\[Warning\\] .*MY-\\d+.* Cannot calculate statistics for table `test`\.`.*` because the \.ibd file is missing");
call mtr.add_suppression("\\[Warning\\] .*MY-\\d+.* Cannot delete tablespace [0-9]+ in DISCARD TABLESPACE: Tablespace not found");
call mtr.add_suppression("\\[Warning\\] .*MY-\\d+.* Ignoring tablespace .* because it could not be opened");
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* Cannot delete tablespace [0-9]+ because it is not found in the tablespace memory cache");
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* Cannot open datafile for read-only:");
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* Could not find a valid tablespace file for");
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* Failed to find tablespace for table `test`.`.*` in the cache");
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them.");
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* Operating system error number 2 in a file operation.");
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* Tablespace open failed for `test`\.`t`, ignored");
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* The error means the system cannot find the path specified.");
--enable_query_log