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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 学习MySQL系列:8. 探寻MySQL数据目录

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



数据库和文件系统的关系


我们学习了众多的存储引擎,例如InnoDBMyISAM等,这些存储引擎所包含的数据文件,都将数据存储在磁盘中(Memory存储引擎除外),当我们需要读取的时候,会先将磁盘中的数据通过I/O总线,将数据加载到内存中,才能供CPU访问(交由存储引起),在写入的时候,也需要在内存中修改了后(存储引擎),再通过I/O总线写入磁盘。


image.png


不管如何读写,CPU是没法直接访问磁盘的,需要将数据从磁盘中加载进内存,才能供存储引擎使用。


话虽如此,但是我们从应用层面来看的话,似乎可以理解为,数据库在和存储引擎打交道,接而在和磁盘打交道,例如如下:

image.png

所以我们可以把中心放到磁盘上存储引擎文件和数据文件上。



MySQL默认库简介


我们在安装完MySQL后,进入后使用show databases;可以看到默认的数据库,我们可以看到已经默认的数据库,例如:

这里使用的MySQL版本是5.7

image.png


这里简单介绍下是什么意思

  • information_schema记录的是系统表管理的架构对象的元数据, 该库也被称之为InnoDB 数据字典。
  • mysql记录的是数据库系统库,它主要存储了例如 用户信息、帮助信息、时区、优化器等系统表。
  • performance_schema记录的是服务器特性以及系统运行的实时信息。
  • sys记录的是调优和诊断用例,是可以帮助DBA收集数据的一种模式。




创建数据库分析磁盘文件


我们在MySQL中可以使用create database 数据库名称用以创建数据库,我们可以尝试一下,创建一个pdudo_test数据库。


命令:

create database pdudo_test;

image.png


数据库创建,那我们如何获取当前的数据目录呢? 我们可以查询datadir变量的值来确定数据目录是放在那儿的,我们来尝试一下。

命令:

show variables where variable_name = 'datadir';


image.png

我们进入到该目录中,可以去看看。

image.png



我们发现,MySQL给我们每个库,都建了目录,例如mysqlperformance_schemasys 以及刚刚创建的pdudo_test。我们继续查看该目录,发现我们创建的空库,都会有一个db.opt,该文件中存储了数据库选项,其中就包括 使用的字符集 以及 默认排序的规则 等。


image.png



创建表分析


我们在该库中创建一个数据表,查看其文件变化。例如我们创建一个pdudo_test_tables的数据表,其中只有一个字段id,类型为int


命令:

create table pdudo_test_tables (id int);


image.png

image.png


我们再回过头来看数据库目录,我们发现产生了以.ibd.frm结尾的文件,那这些文件是什么意思呢?

.frm用于描述表的结构

.ibd这个是表空间

表空间的又分为独立表空间和系统表空间,这个我们暂时先留着,下次再看。



总结


我们本次测试是存储引擎在innodb环境下进行的,在创建库后,在数据目录下,会出现一个该库的目录和一个db.opt文件,该文件记录的是数据库选项信息,我们在该库中创建表后,会同步出现以表名开头的,且以


.frm.ibd的文件,.frm用于记录表的结构,.ibd用于记录表空间,而表空间又分为独立表空间和系统表空间。




相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
54 3
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
84 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
178 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
71 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
2月前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
23 0
|
2月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
272 0
|
3月前
|
SQL 关系型数据库 MySQL
学习MySQL操作的有效方法
学习MySQL操作的有效方法
50 3
|
3月前
|
SQL 关系型数据库 MySQL
如何学习 MySQL?
如何学习 MySQL?
40 3
|
4月前
|
SQL 关系型数据库 MySQL
学习mysql基础操作
【8月更文挑战第20天】学习mysql基础操作
41 1
|
5月前
|
SQL 缓存 关系型数据库
(十二)MySQL之内存篇:深入探寻数据库内存与Buffer Pool的奥妙!
MySQL是基于磁盘工作的,这句几乎刻在了每个后端程序员DNA里,但它真的对吗?其实答案并不能盖棺定论,你可以说MySQL是基于磁盘实现的,这点我十分认同,但要说MySQL是基于磁盘工作,这点我则抱否定的态度,至于为什么呢?这跟咱们本章的主角:Buffer Pool有关,Buffer Pool是什么?还记得咱们在《MySQL架构篇》中聊到的缓存和缓冲区么,其中所提到的写入缓冲区就位于Buffer Pool中。
415 1