1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
--echo # Bug 34307874: Innodb import tablespace crash on tables with instant algorithm used
--echo # Importing without .cfg file for tables with INSTANT columns must not crash
--echo # Scenario 1: IMPORT without CFG file
LET $MYSQLD_DATADIR = `SELECT @@datadir`;
CREATE TABLE t1 (id INT, str1 VARCHAR(20), index(str1));
INSERT INTO t1 VALUES (1, 'val1');
ALTER TABLE t1 ADD COLUMN str2 VARCHAR(20), ALGORITHM=INSTANT;
INSERT INTO t1 VALUES (2, 'val1', 'val2');
FLUSH TABLES t1 FOR EXPORT;
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLTEST_VARDIR/tmp/t1_backup.ibd
UNLOCK TABLES;
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 DISCARD TABLESPACE;
--copy_file $MYSQLTEST_VARDIR/tmp/t1_backup.ibd $MYSQLD_DATADIR/test/t2.ibd
--error ER_TABLE_SCHEMA_MISMATCH
ALTER TABLE t2 IMPORT TABLESPACE;
DROP TABLE t1;
DROP TABLE t2;
--remove_file $MYSQLD_DATADIR/test/t2.ibd
--remove_file $MYSQLTEST_VARDIR/tmp/t1_backup.ibd
--echo # Scenario 2: IMPORT with CFG file
CREATE TABLE t1 (id INT, str1 VARCHAR(20), index(str1));
INSERT INTO t1 VALUES (1, 'val1');
ALTER TABLE t1 ADD COLUMN str2 VARCHAR(20), ALGORITHM=INSTANT;
INSERT INTO t1 VALUES (2, 'val1', 'val2');
FLUSH TABLES t1 FOR EXPORT;
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLTEST_VARDIR/tmp/t1_backup.ibd
--copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLTEST_VARDIR/tmp/t1_backup.cfg
UNLOCK TABLES;
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 DISCARD TABLESPACE;
--copy_file $MYSQLTEST_VARDIR/tmp/t1_backup.ibd $MYSQLD_DATADIR/test/t2.ibd
--copy_file $MYSQLTEST_VARDIR/tmp/t1_backup.cfg $MYSQLD_DATADIR/test/t2.cfg
ALTER TABLE t2 IMPORT TABLESPACE;
SELECT * FROM t2;
DROP TABLE t1;
DROP TABLE t2;
--remove_file $MYSQLTEST_VARDIR/tmp/t1_backup.ibd
--remove_file $MYSQLTEST_VARDIR/tmp/t1_backup.cfg
--echo # Scenario 3: IMPORT without CFG file for another case
CREATE TABLE t1 (id INT, c1 VARCHAR(20), c2 VARCHAR(20));
INSERT INTO t1 VALUES (1, "1-c1", "1-c2");
ALTER TABLE t1 ADD COLUMN c3 VARCHAR(20), ALGORITHM=INSTANT;
INSERT INTO t1 VALUES (2, "2-c1", "2-c2", "2-c3");
ALTER TABLE t1 ADD COLUMN c4 VARCHAR(20) FIRST, ALGORITHM=INSTANT;
INSERT INTO t1 VALUES ("3-c4", 3, "3-c1", "3-c2", "3-c3");
ALTER TABLE t1 DROP COLUMN c1, ALGORITHM=INSTANT;
INSERT INTO t1 VALUES ("4-c4", 4, "4-c2", "4-c3");
ALTER TABLE t1 RENAME COLUMN c2 TO c22;
INSERT INTO t1 VALUES ("5-c4", 5, "5-c22", "5-c3");
SELECT * FROM t1;
FLUSH TABLES t1 FOR EXPORT;
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLTEST_VARDIR/tmp/t1_backup.ibd
UNLOCK TABLES;
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 DISCARD TABLESPACE;
--copy_file $MYSQLTEST_VARDIR/tmp/t1_backup.ibd $MYSQLD_DATADIR/test/t2.ibd
--error ER_TABLE_SCHEMA_MISMATCH
ALTER TABLE t2 IMPORT TABLESPACE;
DROP TABLE t1;
DROP TABLE t2;
--remove_file $MYSQLD_DATADIR/test/t2.ibd
--remove_file $MYSQLTEST_VARDIR/tmp/t1_backup.ibd
--echo # Scenario 4: IMPORT with CFG file for another case
CREATE TABLE t1 (id INT, c1 VARCHAR(20), c2 VARCHAR(20));
INSERT INTO t1 VALUES (1, "1-c1", "1-c2");
ALTER TABLE t1 ADD COLUMN c3 VARCHAR(20), ALGORITHM=INSTANT;
INSERT INTO t1 VALUES (2, "2-c1", "2-c2", "2-c3");
ALTER TABLE t1 ADD COLUMN c4 VARCHAR(20) FIRST, ALGORITHM=INSTANT;
INSERT INTO t1 VALUES ("3-c4", 3, "3-c1", "3-c2", "3-c3");
ALTER TABLE t1 DROP COLUMN c1, ALGORITHM=INSTANT;
INSERT INTO t1 VALUES ("4-c4", 4, "4-c2", "4-c3");
ALTER TABLE t1 RENAME COLUMN c2 TO c22;
INSERT INTO t1 VALUES ("5-c4", 5, "5-c22", "5-c3");
SELECT * FROM t1;
FLUSH TABLES t1 FOR EXPORT;
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLTEST_VARDIR/tmp/t1_backup.ibd
--copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLTEST_VARDIR/tmp/t1_backup.cfg
UNLOCK TABLES;
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 DISCARD TABLESPACE;
--copy_file $MYSQLTEST_VARDIR/tmp/t1_backup.ibd $MYSQLD_DATADIR/test/t2.ibd
--copy_file $MYSQLTEST_VARDIR/tmp/t1_backup.cfg $MYSQLD_DATADIR/test/t2.cfg
ALTER TABLE t2 IMPORT TABLESPACE;
SELECT * FROM t2;
DROP TABLE t1;
DROP TABLE t2;
--remove_file $MYSQLTEST_VARDIR/tmp/t1_backup.ibd
--remove_file $MYSQLTEST_VARDIR/tmp/t1_backup.cfg
|