各类文件详解

本文详细介绍了MySQL中不同存储引擎的数据文件格式与存储位置,重点解析了MyISAM和InnoDB存储引擎下的文件类型,包括它们如何组织数据和索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在MySQL 中每一个数据库都会在定义好(或者默认)的数据目录下存在一个以数据库名
字命名的文件夹
,用来存放该数据库中各种表数据文件。不同的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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值