MySQL与文件系统关联详解:数据目录、表空间及存储引擎原理

Mason
Mason
发布时间:2026-10-15 | 5人浏览过
原创

MySQL 底层依赖 Linux 文件系统管理磁盘资源,通过全局变量 datadir 指定数据存储位置。本文将详解如何查询配置,并剖析 InnoDB 系统表空间(ibdata1)与独立表空间(idb)、MyISAM 分文件存储(.frm/.MYD/.MYI)等核心结构在磁盘上的具体体现。

MySQL 数据目录配置

MySQL 启动时会读取配置文件(如 my.cnf)或默认路径中的全局系统变量 datadir,该变量直接指向服务器存放数据的根目录。

可以通过以下方式查看当前生效的数据目录:

或在数据库客户端中执行以下 SQL 查询获取绝对路径:

mysql> show variables like '%datadir%';
+---------------+-------------------------------+
| Variable_name | Value                         |
+---------------+-------------------------------+
| datadir       | /usr/local/mysql-5.7.26/data/ |
+---------------+-------------------------------+
1 row in set (0.00 sec)

数据目录下的文件结构

数据库文件夹与属性文件

当创建新数据库时,datadir 目录下会生成一个同名文件夹。例如:

mysql> create database test_data;

在该数据库文件夹内,会存在一个 db.opt 文件。此文件用于记录数据库级别的字符集和排序规则等元数据信息。

需要注意的是,MySQL 内置了四个系统级数据库:mysql(权限与安全)、information_schema(元数据字典)、performance_schema(性能状态监控)以及 sys(聚合视图)。其中,information_schema 是虚拟库,不占用磁盘空间;其余三个数据库都会在 datadir 下生成对应的物理文件夹。

表结构的 .frm 文件

在任何数据库中创建表(无论使用何种存储引擎),都会生成一个名为 表名.frm 的文件。该文件独立于存储引擎,专门用于定义表的结构,包括字段类型、索引约束及引擎选择等信息。

示例建表语句:

CREATE TABLE test_table (
  name varchar(100) DEFAULT NULL
) ENGINE=InnoDB

InnoDB 表的数据存储

InnoDB 采用页(Page)作为最小 I/O 单位,标准页大小为 16KB,并通过表空间(Tablespace)机制来管理这些页。根据版本和配置不同,主要分为两种模式:

系统表空间(System Tablespace)

在 MySQL 5.5.7 至 5.6.6 版本间,若未开启独立表空间功能,数据和索引将统一存放在系统表空间中。默认情况下会在 datadir 根目录生成 ibdata1 文件。初始大小通常为 12MB,且支持自动扩展(Autoextend)。

独立表空间(File-Per-Table)

自 MySQL 5.6.6 起,InnoDB 默认启用独立表空间。这意味着每个表拥有自己的磁盘文件,有利于并发访问和备份恢复。

在上述示例中,test_table` 将在数据库目录下生成对应的 .ibd 文件:

切换方法:修改系统变量 innodb_file_per_table。设为 0 关闭(仅影响新建表),设为 1 开启。注意:该参数仅对参数修改后新创建的表生效,历史表需通过导出导入重建。

MyISAM 表的数据存储

MyISAM 采用“索引与数据分离”的设计,因此每个表会产生三个独立的物理文件:

  • .frm:描述表的元数据结构和定义。
  • .MYD(MYData):存储实际行数据。
  • .MYI(MYIndex):存储数据文件的索引树。

创建 MyISAM 表的示例:

CREATE TABLE `test_table_myisam` (
  `name` varchar(100) DEFAULT NULL
) ENGINE=MyISAM

视图的存储方式

视图本质上是保存了一条 SELECT 查询语句的虚拟表,并不包含真实数据。因此,创建视图时同样只会在对应数据库目录下生成 .frm 文件,用于存储视图的结构定义。

示例:

create view view_test as select * from test_table;
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表