将分区 MRG_MYISAM table 转换为 Innodb
Convert partitioned MRG_MYISAM table to Innodb
我想将超过 1.1 亿行(在大约 60 个分区 table 中)的分区 MYISAM table (MRG_MYISAM) 转换为 Innodb。
有安全的方法吗? (例如改变 Table ....)
或者我应该准备一个转储(这将占用 10 GB 的磁盘空间,而且它可能永远不会完成)
我尝试了此页面上的 MERGE table 示例:https://dev.mysql.com/doc/refman/5.5/en/merge-storage-engine.html
CREATE TABLE `total` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`message` char(20) DEFAULT NULL,
KEY `a` (`a`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8mb4 INSERT_METHOD=LAST UNION=(`t1`,`t2`)
然后我转换了它:
ALTER TABLE total ADD PRIMARY KEY (a),
ENGINE=InnoDB
PARTITION BY HASH(a) PARTITIONS 4;
我必须首先确保 a
列中没有重复项。
结果 table 是:
CREATE TABLE `total` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`message` char(20) DEFAULT NULL,
PRIMARY KEY (`a`),
KEY `a` (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4
PARTITION BY HASH (a)
PARTITIONS 4
所以它在列 a
上仍然有冗余索引,但除此之外似乎还有效。
请注意,这确实需要额外的存储空间 space。合并 table 定义为并集的原始 table 仍然存在。
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1 |
| t2 |
| total |
+----------------+
对 t1
、t2
中数据的任何进一步更改都不会成为 total
table.
的一部分
我想将超过 1.1 亿行(在大约 60 个分区 table 中)的分区 MYISAM table (MRG_MYISAM) 转换为 Innodb。
有安全的方法吗? (例如改变 Table ....)
或者我应该准备一个转储(这将占用 10 GB 的磁盘空间,而且它可能永远不会完成)
我尝试了此页面上的 MERGE table 示例:https://dev.mysql.com/doc/refman/5.5/en/merge-storage-engine.html
CREATE TABLE `total` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`message` char(20) DEFAULT NULL,
KEY `a` (`a`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8mb4 INSERT_METHOD=LAST UNION=(`t1`,`t2`)
然后我转换了它:
ALTER TABLE total ADD PRIMARY KEY (a),
ENGINE=InnoDB
PARTITION BY HASH(a) PARTITIONS 4;
我必须首先确保 a
列中没有重复项。
结果 table 是:
CREATE TABLE `total` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`message` char(20) DEFAULT NULL,
PRIMARY KEY (`a`),
KEY `a` (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4
PARTITION BY HASH (a)
PARTITIONS 4
所以它在列 a
上仍然有冗余索引,但除此之外似乎还有效。
请注意,这确实需要额外的存储空间 space。合并 table 定义为并集的原始 table 仍然存在。
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1 |
| t2 |
| total |
+----------------+
对 t1
、t2
中数据的任何进一步更改都不会成为 total
table.