上一节我们看了MySQL
存储引擎,这次我们来看看MySQL
数据目录。
数据库和文件系统的关系
我们学习了众多的存储引擎,例如InnoDB
、MyISAM
等,这些存储引擎所包含的数据文件,都将数据存储在磁盘中(Memory
存储引擎除外),当我们需要读取的时候,会先将磁盘中的数据通过I/O
总线,将数据加载到内存中,才能供CPU
访问(交由存储引起),在写入的时候,也需要在内存中修改了后(存储引擎),再通过I/O
总线写入磁盘。
不管如何读写,CPU
是没法直接访问磁盘的,需要将数据从磁盘中加载进内存,才能供存储引擎使用。
话虽如此,但是我们从应用层面来看的话,似乎可以理解为,数据库在和存储引擎打交道,接而在和磁盘打交道,例如如下:
所以我们可以把中心放到磁盘上存储引擎文件和数据文件上。
MySQL
默认库简介
我们在安装完MySQL
后,进入后使用show databases;
可以看到默认的数据库,我们可以看到已经默认的数据库,例如:
这里使用的MySQL
版本是5.7
。
这里简单介绍下是什么意思
information_schema
记录的是系统表管理的架构对象的元数据, 该库也被称之为InnoDB
数据字典。mysql
记录的是数据库系统库,它主要存储了例如 用户信息、帮助信息、时区、优化器等系统表。performance_schema
记录的是服务器特性以及系统运行的实时信息。sys
记录的是调优和诊断用例,是可以帮助DBA
收集数据的一种模式。
创建数据库分析磁盘文件
我们在MySQL
中可以使用create database 数据库名称
用以创建数据库,我们可以尝试一下,创建一个pdudo_test
数据库。
命令:
create database pdudo_test;
数据库创建,那我们如何获取当前的数据目录呢? 我们可以查询datadir
变量的值来确定数据目录是放在那儿的,我们来尝试一下。
命令:
show variables where variable_name = 'datadir';
我们进入到该目录中,可以去看看。
我们发现,MySQL
给我们每个库,都建了目录,例如mysql
、performance_schema
、sys
以及刚刚创建的pdudo_test
。我们继续查看该目录,发现我们创建的空库,都会有一个db.opt
,该文件中存储了数据库选项,其中就包括 使用的字符集 以及 默认排序的规则 等。
创建表分析
我们在该库中创建一个数据表,查看其文件变化。例如我们创建一个pdudo_test_tables
的数据表,其中只有一个字段id
,类型为int
。
命令:
create table pdudo_test_tables (id int);
我们再回过头来看数据库目录,我们发现产生了以.ibd
和.frm
结尾的文件,那这些文件是什么意思呢?
.frm
用于描述表的结构
.ibd
这个是表空间
表空间的又分为独立表空间和系统表空间,这个我们暂时先留着,下次再看。
总结
我们本次测试是存储引擎在innodb
环境下进行的,在创建库后,在数据目录下,会出现一个该库的目录和一个db.opt
文件,该文件记录的是数据库选项信息,我们在该库中创建表后,会同步出现以表名开头的,且以
.frm
和.ibd
的文件,.frm
用于记录表的结构,.ibd
用于记录表空间,而表空间又分为独立表空间和系统表空间。