Innodb、MYISAM的文件存储结构

MySQL的每个数据库都对应存放在一个与数据库同名的文件夹中,MySQL数据库文件包括MySQLserver所创建的数据库文件和MySQL所用存储引擎创建的数据库文件。

查看MySql数据库物理文件存放位置

 

1、MySQL创建并管理的数据库文件:

.frm文件:存储数据表的框架结构,文件名与表名相同,每个表对应一个同名frm文件,与操作系统和存储引擎无关,即不管MySQL运行在何种操作系统上,使用何种存储引擎,都有这个文件。

除了必有的.frm文件,根据MySQL所使用的存储引擎的不同(MySQL常用的两个存储引擎是MyISAM和InnoDB),存储引擎会创建各自不同的数据表文件。

2、innodb数据表文件:

从物理意义上来讲,InnoDB表由共享表空间、日志文件组(redo文件组)、表结构定义文件组成。若将innodb_file_per_table设置为on,则系统将为每一个表单独的生成一个table_name.ibd的文件(独占表空间),在此文件中,存储与该表相关的数据、索引、表的内部数据字典信息。表结构文件则以.frm结尾,这与存储引擎无关。


共享表空间以及独占表空间都是针对数据的从物理意义上来讲

共享表空间:  会把表集中存储在一个系统表空间里。即每一个数据库的所有表的数据,索引文件全部放在一个文件中。该文件目录默认的是服务器的数据目录。 默认的文件名为:ibdata1  初始化为10M。

独占表空间:  每一个表分别创建一个表空间,这时。在对应的数据库目录里每一个表都有.ibd文件(这个文件包括了单独一个表的数据内容以及索引内容)。


通过show variables like '%innodb_file_per_table%';可以查看是哪种类型的表空间。

innodb_file_per_table = ON,也就是独立表空间的表.

 

通过show variables like 'innodb_data%';可以产看共享表空间的数据文件存储路径

 

例子:Innodb独占表空间

 

2.MyISAM数据库表文件:

MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器;每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表明。例如,我建立了一个MyISAM引擎的test表,那么就会生成以下三个文件:


test.frm,存储表定义;
test.MYD,存储数据;
test.MYI,存储索引。

猜你喜欢

转载自www.cnblogs.com/xingxia/p/mysql_myisam_innodb_data_struct.html