mirror of
https://github.com/MariaDB/server.git
synced 2025-02-15 01:45:33 +01:00
![Yuchen Pei](/assets/img/avatar_default.png)
Allow ALTER TABLE ... IMPORT TABLESPACE without creating the table followed by discarding the tablespace. That is, assuming we want to import table t1 to t2, instead of CREATE TABLE t2 LIKE t1; ALTER TABLE t2 DISCARD TABLESPACE; FLUSH TABLES t1 FOR EXPORT; --copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_DATADIR/test/t2.cfg --copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd UNLOCK TABLES; ALTER TABLE t2 IMPORT TABLESPACE; We can simply do FLUSH TABLES t1 FOR EXPORT; --copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_DATADIR/test/t2.cfg --copy_file $MYSQLD_DATADIR/test/t1.frm $MYSQLD_DATADIR/test/t2.frm --copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd UNLOCK TABLES; ALTER TABLE t2 IMPORT TABLESPACE; We achieve this by creating a "stub" table in the second scenario while opening the table, where t2 does not exist but needs to import from t1. The "stub" table is similar to a table that is created but then instructed to discard its tablespace. We include tests with various row formats, encryption, with indexes and auto-increment.
41 lines
1.3 KiB
Text
41 lines
1.3 KiB
Text
#
|
|
# MDEV-26131 SEGV in ha_innobase::discard_or_import_tablespace
|
|
#
|
|
CREATE TABLE t1(f1 int,f2 text)ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES(1, "InnoDB");
|
|
CREATE TABLE t2 LIKE t1;
|
|
ALTER TABLE t2 ADD KEY idx (f2(13));
|
|
ALTER TABLE t2 DISCARD TABLESPACE;
|
|
FLUSH TABLES t1 FOR EXPORT;
|
|
UNLOCK TABLES;
|
|
ALTER TABLE t2 IMPORT TABLESPACE;
|
|
ERROR HY000: Internal error: Drop all secondary indexes before importing table test/t2 when .cfg file is missing.
|
|
ALTER TABLE t2 DROP KEY idx;
|
|
Warnings:
|
|
Warning 1814 Tablespace has been discarded for table `t2`
|
|
ALTER TABLE t2 IMPORT TABLESPACE;
|
|
Warnings:
|
|
Warning 1810 IO Read error: (2, No such file or directory) Error opening './test/t2.cfg', will attempt to import without schema verification
|
|
SELECT * FROM t2;
|
|
f1 f2
|
|
1 InnoDB
|
|
DROP TABLE t1, t2;
|
|
#
|
|
# MDEV-26137 ALTER TABLE IMPORT enhancement
|
|
#
|
|
# with encryption and page_compressed
|
|
CREATE TABLE t1 (a int, b varchar(50)) ENGINE=InnoDB ENCRYPTED=YES ENCRYPTION_KEY_ID=6 PAGE_COMPRESSED=1;
|
|
INSERT INTO t1 VALUES(42, "hello");
|
|
FLUSH TABLES t1 FOR EXPORT;
|
|
UNLOCK TABLES;
|
|
ALTER TABLE t2 IMPORT TABLESPACE;
|
|
SHOW CREATE TABLE t2;
|
|
Table Create Table
|
|
t2 CREATE TABLE `t2` (
|
|
`a` int(11) DEFAULT NULL,
|
|
`b` varchar(50) DEFAULT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci `ENCRYPTED`=YES `ENCRYPTION_KEY_ID`=6 `PAGE_COMPRESSED`=1
|
|
SELECT * FROM t2;
|
|
a b
|
|
42 hello
|
|
DROP TABLE t1, t2;
|