在 MySQL 中,物理文件存放在数据目录中。数据目录与安装目录不同,安装目录用来存储控制服务器和客户端程序的命令,数据目录用来存储 MySQL 服务器在运行过程中产生的数据。本节主要介绍 MySQL 数据目录的物理结构和作用。
MySQL 中任何一项逻辑性或者物理性文件都具有可配置性,另外由于开源的原因,每个版本都有一些改进,所以我们在学习本节内容时要灵活掌握,不能生搬硬套。
如果你不知道 MySQL 的数据目录路径,可以通过`SHOW VARIABLES LIKE 'datadir';`命令查看。
下面分别讲解 MySQL 数据目录里存放的目录和文件。
## 1\. 数据目录
下图是 MySQL(5.7.29)在 Windows 系统下安装的数据文件目录,可以看到有如下几类文件。
![](http://h.yiniuedu.com/905164651013b5cf8a8103a0f99232af)
Data 目录用来存放数据库相关的数据信息,包括数据库信息,表信息等。
MySQL 5.7 及之后的版本开始支持集群模式,installer\_config.xml 配置文件主要用于配置单节点或集群模式。
my.ini 文件是 MySQL 服务端和客户端主要的配置文件,包括编码集、默认引擎、最大连接数等设置。MySQL 服务器启动时会默认加载此文件。
## 2\. Data目录
Data 目录中存放的文件如下图所示:
![](http://h.yiniuedu.com/0fe9d555d31a16c10a49600b27cde76e)
由图中可以看出,系统数据库和用户自定义数据库的存放路径相同。数据库目录中主要存放相应的数据库对象(图中箭头指向的为 test 数据库目录中存放的文件 )。
对 Data 目录中的文件说明如下:
* mysql、performance\_schema、sakila、sys 和 world 是系统数据库,information\_schema 数据库比较特殊,这里没有相应的数据库目录。
* test 是用户自定义的数据库,也就是用户自己创建的数据库。
* auto.cnf:MySQL 服务器的选项文件,用于存储 server-uuid 的值。server-uuid 与 server-id 一样,用于标识 MySQL 实例在集群中的唯一性。
* ib\_logfile0、ib\_logfile1 是支持事务性引擎的 redo 日志文件
* ibdata1 为共享表空间(系统表空间)。如果采用 InnoDB 引擎,默认大小为 10M 。
* ibtmp1 为存储临时对象的空间,比如临时表对象等。
数据目录里可能还有:
* MySQL 服务器的进程 ID(PID)文件。
* MySQL 服务器所生成的状态和日志文件。
* DES 密钥文件或服务器的 SSL 证书。
## 3\. 数据库目录
数据库实际是一个目录,每个目录都保存着相应数据库中的表以及表数据。下面我们以 test 数据库为例讲解目录中存放的文件。
test 数据库中有如下几张数据表:
~~~
+-------------------+
| Tables_in_test |
+-------------------+
| tb_student |
| tb_student_course |
| tb_students_info |
| tb_usertest |
+-------------------+
~~~
对 test 数据库目录中的文件说明如下:
#### 1)db.opt
用来保存数据库的配置信息,比如该库的默认字符集编码和字符集排序规则。如果你创建数据库时指定了字符集和排序规则,后续创建的表没有指定字符集和排序规则,那么该表将采用 db.opt 文件中指定的属性。
对于 InnoDB 表,如果是独立的表空间,数据库中的表结构以及数据都存储在数据库的路径下(而不是在共享表空间 ibdata1 文件中)。但是数据中的其他对象,包括数据被修改之后,事务提交之间的版本信息,仍然存储在共享表空间的 ibdata1 文件中。
#### 2).frm
在 MySQL 中建立任何一张数据表,其对应的数据库目录下都会有该表的 .frm 文件。`.frm`文件用来保存每个数据表的元数据(meta)和表结构等信息。数据库崩溃时,可以用 .frm 文件恢复表结构。
.frm 文件跟存储引擎无关,任何存储引擎的数据表都有 .frm 文件,命名方式为`表名.frm`,如 users.frm。
> MySQL 8.0 版本开始,frm 文件被取消,MySQL 把文件中的数据都写到了系统表空间。通过利用 InnoDB 存储引擎来实现表 DDL 语句操作的原子性(在之前版本中是无法实现表 DDL 语句操作的原子性的,如 TRUNCATE 无法回滚)。
#### 3).MYD和.MYI
* `.MYD`理解为 My Data,用于存放 MyISAM 表的数据。
* `.MYI ` 理解为 My Index,主要存放 MyISAM 表的索引及相关信息。
#### 4).ibd
对于 InnoDB 存储引擎的数据表,一个表对应两个文件,一个是`*.frm`,存储表结构信息;一个是`*.ibd`,存储表中数据。
#### 5).ibd和.ibdata
.ibd 和 .ibdata 都是专属于 InnoDB 存储引擎的数据库文件。当采用共享表空间时,所有 InnoDB 表的数据均存放在 .ibdata 中。所以当表越来越多时,这个文件会变得很大。相对应的 .ibd 就是采用独享表空间时 InnoDB 表的数据文件。
当然,就算开启了独享表空间,ibdata 文件也会越来越大,因为这个文件里还存储了:
* 变更缓冲区
* 双写缓冲区
* 撤销日志
- 数据库入门
- 1.常用的数据库
- 2.数据管理技术的3个发展阶段
- 3.数据库是什么?关系型数据库和非关系型数据库又是什么?
- 4.为什么要使用数据库?
- 5.数据库系统是什么?它由哪几部分组成?
- 6.常用数据库访问接口简介
- 7.数据库的种类有哪些?
- 8.几种常用的数据库
- 9.MySQL是什么
- 10.MySQL适用于哪些场景?
- 11.学MySQL前,需要了解这些数据库专业术语
- 12.MySQL客户端和服务器架构(C/S架构)
- 13.明白了MySQL内部结构才能成为高手!
- 14.如何学习数据库(新手必看)?
- 15.小白学习MySQL需要多长时间,能从事哪方面的工作?
- 16.当前市场对数据库程序员的需求如何?待遇如何?
- 17.DBA到底要做什么,成为一名DBA需要具备什么能力?
- 一、数据库的概念和常用工具
- 二、MySQL规范、配置及登录退出操作
- 三、MySQL中的数据类型
- 四、数据库增查改删等操作
- 五、数据表增查改删操作
- 六、MySQL数据增查改删操作
- 七、MySQL存储引擎
- 八、MySQL常用函数
- MySQL的安装和配置
- 1.MySQL 5.7的新特性(新功能)
- 2.MySQL下载步骤详解
- 3.MySQL安装配置教程(Windows系统)
- 4.MySQL免安装版配置教程
- 5.MySQL配置环境变量
- 6.安装MySQL后,如何判断是否已安装成功
- 7.启动MySQL服务的两种方式(图解)
- 8.登录MySQL数据库
- 9.对Linux MySQL软件包的一些说明
- 10.Linux CentOS卸载MySQL(Linux安装MySQL前的准备)
- 11.Linux安装配置MySQL详细步骤
- 12.MySQL my.cnf配置文件详解
- 13.MySQL常用图形化管理工具
- 14.MySQL安装后的目录结构介绍
- 15.MySQL数据库文件存放目录结构详解
- 16.MySQL配置文件(my.ini)详解
- 17.与其它数据库不同,MySQL可以在不同的SQL模式下运行
- 18.MySql Command Line Client闪退原因及解决方案
- MySQL数据库的基本操作
- 1.SQL是什么?它能做什么?
- 2.SQL的基本书写规则
- 3.MySQL查看或显示数据库(SHOW DATABASES语句)
- 4.MySQL创建数据库(CREATE DATABASE语句)
- 5.MySQL修改数据库:ALTER DATABASE用法简介
- 6.MySQL删除数据库(DROP DATABASE语句)
- 7.MySQL选择数据库(MySQL USE语句)
- 8.MySQL注释:单行注释和多行注释
- 9.MySQL中SQL语句的大小写规则
- 10.如何查看MySQL系统帮助?
- 11.看懂SQL错误代码,提高学习效率!
- 数据库高级
- 一、视图的操作
- 二、触发器的操作
- 三、事务的操作
- 四、索引的操作
- 五、存储过程的操作
- 六、数据库的优化方案
- 1.分库、分表和索引
- 2.读写分离和查询优化
- 3.join代替子查询
- 4.尽量使用短小的事务
- 5.常用小技巧
- MySQL使用注意事项
- 1.字符乱码及连接驱动