学习MySQL系列:8. 探寻MySQL数据目录

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情

上一节我们看了MySQL存储引擎,这次我们来看看MySQL数据目录。

数据库和文件系统的关系

我们学习了众多的存储引擎,例如InnoDBMyISAM等,这些存储引擎所包含的数据文件,都将数据存储在磁盘中(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给我们每个库,都建了目录,例如mysqlperformance_schemasys 以及刚刚创建的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用于记录表空间,而表空间又分为独立表空间和系统表空间。

资料参考:

information_schema`简介

mysql简介

performance_schema`简介

sys简介

posted @ 2022-08-05 22:31  pdudos  阅读(0)  评论(0编辑  收藏  举报  来源