在测试环境中造了一个大表,因为环境配置了gtid的复制方式,索引使用create table t_bigtable select * from information_schema.tables;的方式提示错误。
ERROR 1786 (HY000): CREATE TABLE … SELECT is forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1.
所以采用了先创建表结构,然后在插入数据的方式。
create table t_bigtable like information_schema.tables;
insert into t_bigtable select * from information_schema.tables;
insert into t_bigtable select * from t_bigtable;
多次执行上面的语句后提示表t_bigtable满了,库的配置中使用了单独的表空间,而且检查数据所在的磁盘空间空闲也很多,不是磁盘空间满导致的,别的表在添加数据的时候是正常的。这个时候看了下表的建表语句。
ABLES | CREATE TEMPORARY TABLE `TABLES` ( `TABLE_CATALOG` varchar(512) NOT NULL DEFAULT '', `TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '', `TABLE_NAME` varchar(64) NOT NULL DEFAULT '', `TABLE_TYPE` varchar(64) NOT NULL DEFAULT '', `ENGINE` varchar(64) DEFAULT NULL, `VERSION` bigint(21) unsigned DEFAULT NULL, `ROW_FORMAT` varchar(10) DEFAULT NULL, `TABLE_ROWS` bigint(21) unsigned DEFAULT NULL, `AVG_ROW_LENGTH` bigint(21) unsigned DEFAULT NULL, `DATA_LENGTH` bigint(21) unsigned DEFAULT NULL, `MAX_DATA_LENGTH` bigint(21) unsigned DEFAULT NULL, `INDEX_LENGTH` bigint(21) unsigned DEFAULT NULL, `DATA_FREE` bigint(21) unsigned DEFAULT NULL, `AUTO_INCREMENT` bigint(21) unsigned DEFAULT NULL, `CREATE_TIME` datetime DEFAULT NULL, `UPDATE_TIME` datetime DEFAULT NULL, `CHECK_TIME` datetime DEFAULT NULL, `TABLE_COLLATION` varchar(32) DEFAULT NULL, `CHECKSUM` bigint(21) unsigned DEFAULT NULL, `CREATE_OPTIONS` varchar(255) DEFAULT NULL, `TABLE_COMMENT` varchar(2048) NOT NULL DEFAULT '' ) ENGINE=MEMORY DEFAULT CHARSET=utf8 |
发现这个表的存储引擎是memory类型的。虽然设置建表的默认类型是innodb,但是使用create table like的方式,表的创建结构源表是一模一样的。