1. show variables like 'datadir';

image.png
MySOL 在运行过程中都会产生哪些数据呢?当然会包含我们创建的数据库、表、视图和触发器等用户数据,除了这些用户数据,为了程序更好的运行,MySQL 也会创建一些其他的额外数据

数据库在文件系统中的表示

每当我们使用 CREATE DATABASE 语句创建一个数据库的时候,在文件系统上实际发生了什么呢?其实很简单,每个数据库都对应数据目录下的一个子目录, 或者说对应一个文件夹,我们每当我们新建一个数据库时,MySQL 会帮我们做这两件事儿:
1. 在数据目录下创建一个和数据库名同名的子目录(或者说是文件夹)。
2.在该与数据库名同名的子目录下创建一个名为 db.opt 的文件,这个文件中包含了该数据库的各种属性,比方说该数据库的字符集和比较规则。

表在文件系统中的表示

我们的数据其实都是以记录的形式插入到表中的,每个表的信息其实可以分为两种:
1. 表结构的定义
2. 表中的数据
表结构就是该表的名称,表里边有多少列,每个列的数据类型\约束条件和索引,字符集和比较规则等各种信息,这些信息都体现在了我们的建表语句中了。为了保存这些信息,InnoDB 和 MyIASM 这两种存储引擎都在数据目录下对应的数据库子目录下创建了一个专门用于描述表结构的文件, 文件名是这样:表名**.frm**
比方说我们在 mysqladv 数据库下创建一个名为 test 的表:
那在数据库 mysqladv 对应的子目录下就会创建一个名为 test.frm 的用于描述表结构的文件。这个后缀名为.fm 是以二进制格式存储的。
那表中的数据存到什么文件中了呢?在这个问题上,不同的存储引擎就产生了有所不同,下边我们分别看一下 InnoDB 和 MyISAM 是用什么文件来保存表中数据的。