以下涉及到的文件在mysql数据库指定的数据目录下。
1. 独立表空间
5.6之前所有表信息都在共享表空间存放,即ibdata文件中(存放所有数据库信息),也是mysql默认的设置。
5.6及之后默认使用独立表空间存储数据行及索引信息,即ibd文件。特点为一个表对应一个ibd文件。ibdata文件中也只存放元数据+undo;
2. innodb引擎表组成:
.frm(存放表结构信息) + .ibd(存储数据行及索引) + .ibdata1(存放元数据+undo)
3. 查看独立表空间是否生效
select @@innodb_file_per_table; 结果为1表示独立表空间生效
4. 更改独立表空间为共享表空间
set global innodb_file_per_table=0; 了解即可, 不建议修改
更改后再创建的表不再生成ibd文件,数据行和索引信息都将被存储到ibdata1文件中。
5. 独立表空间迁移命令
需求:复制表的frm文件和ibd文件到新库中,想正常使用该表。
1. 因缺少元数据,即ibdata1文件中记录的信息,而这个文件我们无法直接修改,只能有mysql提供的语句来操作,顾此方法行不通。
2. 在新库中创建和目标表一样结构的表,使得ibdata1数据字典中有该表信息;
使用alter table xx dicard tablespace; 来使mysql删掉xx表的ibd文件;
把目标表的ibd文件再复制到原来的ibd文件处;
使用alter table xx import tablespace; 来使mysql重新加载改ibd文件,因ibd中存的就是数据行和索引信息,所以达到了需求。