MySQL高级篇——MySQL架构篇2(MySQL的数据目录)

news2024/10/7 18:21:48

目录

  • 1 MySQL8的主要目录结构
    • 1.1 数据库文件的存放路径
    • 1.2 相关命令目录
    • 1.3 配置文件目录
  • 2 数据库和文件系统的关系
    • 2.1 查看默认数据库
    • 2.2 数据库在文件系统中的表示
      • 2.3.1 InnoDB存储引擎模式
      • 2.3.2 MyISAM存储引擎模式
    • 2.4 总结
    • 2.5 视图在文件系统中的表示
    • 2.6 其他的文件

1 MySQL8的主要目录结构

安装好MySQL 8之后,我们查看如下的目录结构:
在这里插入图片描述

1.1 数据库文件的存放路径

MySQL数据库文件的存放路径:/var/lib/mysql/

MySQL服务器程序在启动时会到文件系统的某个目录下加载一些文件,之后在运行过程中产生的数据也都会存储到这个目录下的某些文件中,这个目录就称为数据目录

MySQL把数据都存到哪个路径下呢?其实数据目录对应着一个系统变量 datadir,我们在使用客户端与服务器建立连接之后查看这个系统变量的值就可以了:
在这里插入图片描述
从结果中可以看出,在我的计算机上MySQL的数据目录就是 /var/lib/mysql/

1.2 相关命令目录

相关命令目录:/usr/bin(mysqladmin、mysqlbinlog、mysqldump等命令)和/usr/sbin
在这里插入图片描述

1.3 配置文件目录

配置文件目录:/usr/share/mysql-8.0(命令及配置文件),/etc/mysql(如my.cnf)
在这里插入图片描述

在这里插入图片描述

2 数据库和文件系统的关系

InnoDBMyISAM 这样的存储引擎都是把表存储在磁盘上的,操作系统用来管理磁盘的结构被称为文件系统,所以用专业一点的话来表述就是:像InnoDBMyISAM 这样的存储引擎都是把表存储在文件系统上的。当我们想读取数据的时候,这些存储引擎会从文件系统中把数据读出来返回给我们,当我们想写入数据的时候,这些存储引擎会把这些数据又写回文件系统。本章学习一下InnoDB和MyISAM这两个存储弓l擎的数据如何在文件系统中存储。

2.1 查看默认数据库

mysql> SHOW DATABASES;

在这里插入图片描述
可以看到有4个数据库是属于MySQL自带的系统数据库。

  • mysql
    MySQL 系统自带的核心数据库,它存储了MySQL的用户账户和权限信息一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。
  • information_schema
    MySQL 系统自带的数据库,这个数据库保存着MySQL服务器 维护的所有其他数据库的信息 ,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引。这些信息并不是真实的用户数据,而是一些描述性信息,有时候也称之为 元数据 。在系统数据库 information_schema 中提供了一些以innodb_sys 开头的表,用于表示内部系统表。
    在这里插入图片描述
  • performance_schema
    MySQL 系统自带的数据库,这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,可以用来 监控 MySQL 服务的各类性能指标 。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等信息。
  • sys
    MySQL 系统自带的数据库,这个数据库主要是通过 视图 的形式把 information_schemaperformance_schema 结合起来,帮助系统管理员和开发人员监控 MySQL 的技术性能。

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

看一下计算机上的数据目录下的内容:
在这里插入图片描述
这个数据目录下的文件和子目录比较多,除了information_schema 这个系统数据库外,其他的数据库
数据目录 下都有对应的子目录。

以我的 temp 数据库为例,
在MySQL5.7 中打开:
在这里插入图片描述
在MySQL8.0 中打开:
在这里插入图片描述

2.3.1 InnoDB存储引擎模式

  1. 表结构

为了保存表结构, InnoDB数据目录 下对应的数据库子目录下创建了一个专门用于 描述表结构的文件 ,文件名是这样:表名.frm

【示例】
比方说我们在 atguigu 数据库下创建一个名为 test 的表:

mysql> USE atguigu;
Database changed
mysql> CREATE TABLE test (
-> c1 INT
-> );
Query OK, 0 rows affected (0.03 sec)

那在数据库 atguigu 对应的子目录下就会创建一个名为test.frm 的用于描述表结构的文件。.frm文件的格式在不同的平台上都是相同的。这个后缀名为.frm是以 二进制格式 存储的,我们直接打开是乱码的。

  1. 表中数据和索引

①系统表空间(system tablespace)
默认情况下,InnoDB会在数据目录下创建一个名为 ibdata1 、大小为 12M 的文件,这个文件就是对应的 系统表空间 在文件系统上的表示。怎么才12M?注意这个文件是 自扩展文件 ,当不够用的时候它会自己增加文件大小。

当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得原来的 ibdata1 这个文件名难听,那可以在MySQL启动时配置对应的文件路径以及它们的大小

【示例】
比如我们这样修改一下my.cnf 配置文件:

[server]
innodb_data_file_path=data1:512M;data2:512M:autoextend

这样在MySQL启动之后就会创建这两个512M大小的文件作为系统表空间,其中的autoextend表明这两个文件如果不够用会自动扩展data2文件的大小。

需要注意的一点是,在一个MySQL服务器中, 系统表空间只有一份。 从MySQ5.5.7到MySQL5.6.6之间的各 个版本中,我们表中的数据都会被默认存储到这个系统表空间。

② 独立表空间(file-per-table talespace)

在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为 每一个表建立一个独立表空间 ,也就是说我们创建了多少个表,就有多少个独立表空间。使用 独立表空间 来存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相同,只不过添加了一个 .ibd 的扩展名而已,所以完整的文件名称长这样:表名.ibd

【示例】
比如:我们使用了 独立表空间 去存储 atguigu 数据库下的 test 表的话,那么在该表所在数据库对应的 atguigu 目录下会为 test 表创建这两个文件:

test.frm
test.ibd

其中 test.ibd 文件就用来存储 test 表中的数据和索引

③ 系统表空间与独立表空间的设置

我们可以自己指定使用 系统表空间 还是 独立表空间 来存储数据,这个功能由启动参数innodb_file_per_table 控制。

【示例】
比如说我们想刻意将表数据都存储到 系统表空间 时,可以在启MySQL服务器的时候这样配置:

[server]
innodb_file_per_table=0 # 0:代表使用系统表空间; 1:代表使用独立表空间

默认情况:
在这里插入图片描述

④ 其他类型的表空间

随着MySQL的发展,除了上述两种老牌表空间之外,现在还新提出了一些不同类型的表空间,比如通用表空间(general tablespace)、**临时表空间(temporary tablespace)**等。

  1. 疑问

.frm在MySQL8中不存在了。那去哪里了呢?

这就需要解析ibd文件。Oracle 官方将frm文件的信息及更多信息移动到叫做序列化字典信息(Serialized DictionaryInformation, SDI) ,SDI被写在ibd文件内部。MySQL 8.0属于0racle旗下,同理。

为了从IBD文件中提取SDI信息,Oracle提供了一个应用程序ibd2sdi。
=== ibd2sdi官方文档===
这个工具不需要下载,MySQL8自带

查看表结构

到存储ibd文件的目录下,执行下面的命令:

ibd2sdi --dump-file=student.txt student.ibd

在这里插入图片描述
这样ibd2sdi就会把**.ibd里存储的表结构以json的格式保存在student.txt中
在这里插入图片描述

图中标记部分从上到下分别表示:表名、列、列名、列的长度

通过上面的测试结果可以发现,MySQL8把之 前版本的frm文件合并到ibd文件中了。

2.3.2 MyISAM存储引擎模式

  1. 表结构

在存储表结构方面, MyISAMInnoDB 一样,也是在 数据目录 下对应的数据库子目录下创建了一个专门用于描述表结构的文件:表名.frm

  1. 表中数据和索引

在MyISAM中的索引全部都是 二级索引 ,该存储引擎的 数据和索引是分开存放 的。所以在文件系统中也是使用不同的文件来存储数据文件和索引文件,同时表数据都存放在对应的数据库子目录下。假如 test表使用MyISAM存储引擎的话,那么在它所在数据库对应的 atguigu 目录下会为 test 表创建这三个文件:

test.frm 存储表结构
test.MYD 存储数据 (MYData)
test.MYI 存储索引 (MYIndex)

【示例】
创建一个 MyISAM 表,使用 ENGINE 选项显式指定引擎。因为 InnoDB 是默认引擎

CREATE TABLE `student_myisam` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(64) DEFAULT NULL,
`age` int DEFAULT NULL,
`sex` varchar(2) DEFAULT NULL,
PRIMARY KEY (`id`)
)ENGINE=MYISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb3;

2.4 总结

举例: 数据库a表b
1、如果表b采用 InnoDB ,data\a中会产生1个或者2个文件:

  • b.frm :描述表结构文件,字段长度等
  • 如果采用 系统表空间 模式的,数据信息和索引信息都存储在 ibdata1
  • 如果采用 独立表空间 存储模式,data\a中还会产生 b.ibd 文件(存储数据信息和索引信息)

此外:
① MySQL5.7 中会在data/a的目录下生成 db.opt 文件用于保存数据库的相关配置。比如:字符集、比较规则。而MySQL8.0不再提供db.opt文件。
② MySQL8.0中不再单独提供b.frm,而是合并在b.ibd文件中。

2、如果表b采用 MyISAM ,data\a中会产生3个文件:

  • MySQL5.7 中: b.frm :描述表结构文件,字段长度等
    MySQL8.0 中 b.xxx.sdi :描述表结构文件,字段长度等
  • b.MYD (MYData):数据信息文件,存储数据信息(如果采用独立表存储模式)
  • b.MYI (MYIndex):存放索引信息文件

2.5 视图在文件系统中的表示

我们知道MySQL中的视图其实是虚拟的表,也就是某个查询语句的一个别名而已,所以在存储视图的时候是不需要存储真实的数据的,只需要把它的结构存储起来就行了。和表一样, 描述视图结构的文件也会被存储到所属数据库对应的子目录下边,只会存储-一个视图名**. frm 的文件**。如下图中的: emp_details_view.frm
在这里插入图片描述

2.6 其他的文件

除了我们上边说的这些用户自己存储的数据以外,数据 目录下还包括为了更好运行程序的一些额外文件,主要包括这几种类型的文件:

  • 服务器进程文件

我们知道每运行一个MySQL服务器程序,都意味着启动-个进程。MySQL服务器会把自己的进程ID写入到一 一个文件中。

  • 服务器日志文件

在服务器运行过程中,会产生各种各样的日志,比如常规的查询日志、错误日志、二进制日志redo日志等。这些日志各有各的用途,后面讲解。

  • 默认/自动生成的SSL和RSA证书和密钥文件

主要是为了客户端和服务器安全通信而创建的一些文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/912736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】vim编辑器

这一趴我们要学习vim编辑器,知道vim是什么、掌握它的3种模式以及学会其常见操作。 目录 Ⅰ. 引入 Ⅱ. 什么是vim? Ⅲ. 3种模式 Ⅳ. 常见操作 命令模式下 复制粘贴组 撤销组 光标定位组 光标移动组 剪切组 切换、替换组 删除组 底行模式下 …

AI+游戏线下沙龙活动暨COC上海城市开发者社区8月活动

引言 近年来,随着人工智能技术的不断发展和游戏开发技术的不断更新,越来越多的游戏公司开始将人工智能技术应用于游戏领域,以提高开发效率、降低成本,实现游戏玩家更好的游戏体验。为了探讨AI游戏的技术实践经验,近日在…

Spring Cloud Alibaba笔记

😀😀😀创作不易,各位看官点赞收藏. 文章目录 Spring Cloud Alibaba 笔记1、Nacos 服务注册和配置中心1.1、Nacos 之下载启动1.2、Nacos 之注册中心1.3、Nacos 之服务发现1.4、Nacos 之配置中心1.5、Nacos 之分类配置1.6、Nacos 之…

【OpenGauss源码学习 —— 执行算子(Result 算子)】

执行算子(Result 算子) 控制算子Result 算子ExecInitResult 函数ResultState 结构体ExecInitResultTupleSlot 函数ExecAllocTableSlot函数 ExecResult 函数TupleTableSlot 结构体ExecProcNode 函数ExecProcNodeByType 函数ExecProject 函数 ExecEndResul…

docker版jxTMS使用指南:使用jxTMS提供数据

本文讲解了如何jxTMS的数据访问框架,整个系列的文章请查看:docker版jxTMS使用指南:4.4版升级内容 docker版本的使用,请查看:docker版jxTMS使用指南 4.0版jxTMS的说明,请查看:4.0版升级内容 4…

韶音的骨传导耳机怎么样,韶音骨传导耳机是真的骨传导吗

韶音骨传导耳机最为受瞩目的是OpenRun Pro,在发声单元位置上采用了开孔的处理,佩戴上耳的时候发声单元可以贴合耳道,在低频延伸性,但在中高频的时候整体会出现震感,纤细的耳挂在佩戴的时候是有着不错的舒适度的&#x…

Java SpringBoot+Vue 的班级综合测评管理系统的设计与实现(2.0 版本)

文章目录 1. 简介2. 技术栈 3. 需求分析用户需求分析功能需求分析系统性能需求分析 4系统总体设计与实现4.1总体设计 5 系统功能的详细设计与实现5.1 管理员功能模块5.2学生功能模块5.3教师功能模块 源码下载地址 1. 简介 传统的班级综合测评管理系统,一开始都是手工…

Django实现音乐网站 ⒀

使用Python Django框架制作一个音乐网站, 本篇主要是推荐页-推荐排行榜、推荐歌手功能开发。 目录 推荐页开发 推荐排行榜 单曲表增加播放量 表模型增加播放量字段 执行表操作 模板中显示外键对应值 表模型外键设置 获取外键对应模型值 推荐排行榜视图 推…

基于web的鲜花商城系统java jsp网上购物超市mysql源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于web的鲜花商城系统 系统有2权限:前台…

HCIA---访问控制列表

文章目录 目录 前言 一.ACL简介: 二.ACL工作原理 ACL组成: ​编辑 规则编号: ACL匹配规则: 总结 前言 一.ACL简介: ACL全称为Access Control List,即访问控制表,是一种用于控制网络资源访问…

微软韦青:滑向冰球将要到达的位置 | 科创人数智思维私董会第9期回顾

2023年8月5日,由科创人、北航投资联手创办的科创人数智思维私董会第9期圆满举行。 微软(中国)首席技术官韦青担任本次活动引导嘉宾,近20位来自传统企业、科创企业、投资机构的CEO、技术决策者及领域专家,围绕新人-机时…

【技术篇】• 饮用水除硝酸盐、地下水除砷、矿泉水除溴的技术汇总

我们所说的“自来水”是指从水龙头里放出来的水。但从水龙头里放出来并不等于安全卫生。实际上,原水必须经过各种处理措施之后才能称为安全卫生的饮用水。每一滴水都要经过了混凝、沉淀、过滤、消毒四个步骤的处理,才能去除杂质和细菌,变得安…

恒运资本:简易程序定增是什么意思?

近年来,在我国股市中,简易程序定增成为了一种受欢迎的融资方法。许多人听过它但并不知道它的含义和工作原理。在本文中,我们将从多个角度来分析简易程序定增。 一、什么是简易程序定增? 简易程序定增是指在不需求经过股东大会批阅…

这6本期刊不再被收录!8月SCISSCI期刊目录已更新~

【SciencePub学术】2023年8月21日,科睿唯安更新了Web of Science核心期刊目录。 此次更新后SCIE期刊目录共包含9496本期刊,SSCI期刊目录共包含3554本期刊。此次SCIE & SSCI期刊目录更新,与上次更新(2023年7月)相比…

AD四层板设计(Altium Designer)

AD绘制四层板 前言一、正片层和负片层介绍二、PCB板的叠层设计1.两层板的叠层2.四层板的叠层 三、规则设计参考资料 前言 1、用 Altium Designer 软件绘制电路时,通常2层板能实现设计需求。遇到板框固定,元器件密集的情况下,2 层板无法实现预…

万字长文带你快速了解整个Flutter开发流程

文章目录 背景1.简介与优势Flutter是什么?为什么选Flutter? 2.开发环境搭建安装Flutter SDK配置开发环境 3.创建项目项目结构概览: 4.UI 构建与布局什么是Widget:StatelessWidget和StatefulWidget:Widget的组合&#x…

不规则透明屏:工作原理和特点应用详解

不规则透明屏是一种新型的显示技术,它可以将图像或视频投射到任意形状的透明屏上,使得观众可以从不同角度观看到清晰的图像。 这种技术可以应用于各种领域,如广告、展览、商场等,具有很大的市场潜力。 不规则透明屏的工作原理是…

5款很少人知道的小众软件,先收藏再下载!

​ 今天推荐5款十分小众的软件,知道的人不多,但是每个都是非常非常好用的,有兴趣的小伙伴可以自行搜索下载。 自定义开始菜单图标——TileIconifier ​ TileIconifier是一款可以让你自定义Windows开始菜单图标的软件,它可以替换…

Lnton羚通云算力平台OpenCV Python颜色空间转换与抠图教程

在 OpenCV Python 中,颜色空间转换和图像抠图是常见的图像处理任务。下面我将为你介绍如何进行颜色空间转换和图像抠图。 颜色空间转换: 在 OpenCV Python 中,可以使用 cv2.cvtColor() 函数将图像从一个颜色空间转换为另一个颜色空间。常用的…

jenkins全量迁移

文章目录 1、目的2、迁移1)查看jenkins的主目录2)登录要迁出的服务器打包3)找到对应的war包4)登录对应迁入服务,上传war包和打包的jenkins数据等5)在新的服务器解压迁入的数据等,并查看端口是否…