mysql innodb引擎独立表空间记录,表组成及表迁移

以下涉及到的文件在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中存的就是数据行和索引信息,所以达到了需求。

  

    

posted @ 2020-05-05 22:17  叶落kiss  阅读(318)  评论(0编辑  收藏  举报