mysql中.frm与.ibdata
【innodb存储引擎】
MySQL为表把它的数据词典信息以.frm文件的形式存在数据库目录里,文件名与表名相同。
但是每个InnoDB表在表空间内的InnoDB内部数据词典里有它自己的条目,即在ibdata文件中有每个innodb表的相关信息。
当MySQL移除表或数据库,会删除.frm文件和InnoDB数据词典(即ibdata文件)内的相应条目;
相应的,当我们新建表或数据库时,也新建.frm文件并在ibdata中新建一个条目。
ibdata文件存储InnoDB系统信息和用户数据库表数据和索引所有innodb表共用ibdata文件,为了防止ibdata由于存储数据造成很大的文件,可以将参数innodb_file_per_table写入配置文件,但要重启后生效。
配置文件加入:
innodb_file_per_table = 1
mysql> show variables like '%innodb_file_per_table%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)
这样,mysql就将innodb表的数据存入各自对应的.ibd文件中了,但结构等信息还是会写入ibdata。
对于已经“撑大”的ibdata文件,可以通过停机重建ibdata和ib_logfile来“缩小”。(相关内容请看本人其他博客,数据文件迁移)
【myisam存储引擎】
MySQL为表把它的数据词典信息以.frm文件的形式存在数据库目录里,文件名与表名相同。
另外,.MYD存储myisam表的数据;.MYI存储myisam表的索引
对于myisam的表,数据和表结构不会进入.ibdata文件。