每一个数据库都会在定义好(或者默认)的数据目录下存在一个以数据库名
字命名的文件夹,用来存放该数据库中各种表数据文件。不同的MySQL 存储引擎有各自不同
的数据文件,存放位置也有区别。多数存储引擎的数据文件都存放在和MyISAM 数据文件位
置相同的目录下,但是每个数据文件的扩展名却各不一样。如MyISAM 用“.MYD”作为扩展
名,Innodb 用“.ibd”,Archive 用“.arc”,CSV 用“.csv”,等等。
1、“.frm”文件
      与表相关的元数据(meta)信息都存放在“.frm”文件中,包括表结构的定义信息等。
不论是什么存储引擎,每一个表都会有一个以表名命名的“.frm”文件。所有的“.frm”文
件都存放在所属数据库的文件夹下面。
2、“.MYD”文件

 “.MYD”文件是MyISAM 存储引擎专用,存放MyISAM 表的数据。每一个MyISAM 表都会
有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,和“.frm”文件在一起。
3、“.MYI”文件
“.MYI”文件也是专属于MyISAM 存储引擎的,主要存放MyISAM 表的索引相关信息。对
于MyISAM 存储来说,可以被cache 的内容主要就是来源于“.MYI”文件中。每一个MyISAM
表对应一个“.MYI”文件,存放于位置和“.frm”以及“.MYD”一样。

 

[root@SR3 mysqldata]# cd mysql
 [root@SR3 mysql]# ls
 columns_priv.frm  help_category.frm  ndb_binlog_index.frm  servers.frm                time_zone_name.frm
 columns_priv.MYD  help_category.MYD  ndb_binlog_index.MYD  servers.MYD                time_zone_name.MYD
 columns_priv.MYI  help_category.MYI  ndb_binlog_index.MYI  servers.MYI                time_zone_name.MYI
 db.frm            help_keyword.frm   plugin.frm            slow_log.CSM               time_zone_transition.frm
 db.MYD            help_keyword.MYD   plugin.MYD            slow_log.CSV               time_zone_transition.MYD
 db.MYI            help_keyword.MYI   plugin.MYI            slow_log.frm               time_zone_transition.MYI
 event.frm         help_relation.frm  proc.frm              tables_priv.frm            time_zone_transition_type.frm
 event.MYD         help_relation.MYD  proc.MYD              tables_priv.MYD            time_zone_transition_type.MYD
 event.MYI         help_relation.MYI  proc.MYI              tables_priv.MYI            time_zone_transition_type.MYI
 func.frm          help_topic.frm     procs_priv.frm        time_zone.frm              user.frm
 func.MYD          help_topic.MYD     procs_priv.MYD        time_zone_leap_second.frm  user.MYD
 func.MYI          help_topic.MYI     procs_priv.MYI        time_zone_leap_second.MYD  user.MYI
 general_log.CSM   host.frm           proxies_priv.frm      time_zone_leap_second.MYI
 general_log.CSV   host.MYD           proxies_priv.MYD      time_zone.MYD
 general_log.frm   host.MYI           proxies_priv.MYI      time_zone.MYI

 

4、“.ibd”文件和ibdata 文件
       这两种文件都是存放Innodb 数据的文件,之所以有两种文件来存放Innodb 的数据(包
括索引),是因为Innodb 的数据存储方式能够通过配置来决定是使用共享表空间存放存储数
据,还是独享表空间存放存储数据。独享表空间存储方式使用“.ibd”文件来存放数据,且
每个表一个“.ibd”文件,文件存放在和MyISAM 数据相同的位置。如果选用共享存储表空
间来存放数据,则会使用ibdata 文件来存放,所有表共同使用一个(或者多个,可自行配
置)ibdata 文件。ibdata 文件可以通过innodb_data_home_dir 和innodb_data_file_path
两个参数共同配置组成, innodb_data_home_dir 配置数据存放的总目录, 而
innodb_data_file_path 配置每一个文件的名称。当然, 也可以不配置
innodb_data_home_dir 而直接在innodb_data_file_path 参数配置的时候使用绝对路径来
完成配置。innodb_data_file_path 中可以一次配置多个ibdata 文件。文件可以是指定大
小,也可以是自动扩展的,但是Innodb 限制了仅仅只有最后一个ibdata 文件能够配置成自
动扩展类型。当我们需要添加新的ibdata 文件的时候,只能添加在innodb_data_file_path
配置的最后,而且必须重启MySQL 才能完成ibdata 的添加工作。不过如果我们使用独享表
空间存储方式的话,就不会有这样的问题,但是如果要使用裸设备的话,每个表一个裸设备,
可能造成裸设备数量非常大,而且不太容易控制大小,实现比较困难,而共享表空间却不会
有这个问题,容易控制裸设备数量。我个人还是更倾向于使用独享表空间存储方式。当然,
两种方式各有利弊,看大家各自应用环境的侧重点在那里了。
上面仅仅介绍了两种最常用存储引擎的数据文件,此外其他各种存储引擎都有各自的数
据文件,读者朋友可以自行创建某个存储引擎的表做一个简单的测试,做更多的了解。

 

mysql>  show variables  like 'innodb_data%';
 +-----------------------+------------------------+
 | Variable_name         | Value                  |
 +-----------------------+------------------------+
 | innodb_data_file_path | ibdata1:10M:autoextend |
 | innodb_data_home_dir  |                        |
 +-----------------------+------------------------+
 2 rows in set (0.00 sec) 
[root@SR3 mysqldata]# ls ib*
 ibdata1  ib_logfile0  ib_logfile1