MySQL(高级特性篇) 02 章——MySQL的数据目录

news2025/1/17 16:48:56

一、MySQL8的主要目录结构

  1. 命令:
    find / -name mysql
  2. 安装好MySQL8之后,我们查看如下的目录结构

(1)数据库文件的存放路径

  1. MySQL数据库文件的存放路径:/var/lib/mysql/
  2. MySQL服务器程序在启动时会到文件系统的某个目录下加载一些文件,之后在运行过程中产生的数据也都会存储到这个目录下的某个文件中,这个目录就称为数据目录
  3. MySQL把数据都存到哪个路径下了呢?其实数据目录对应着一个系统变量datadir,我们在使用客户端与服务器建立连接之后查看这个系统变量的值就可以了
  4. 从结果中,我们就可以看出在我的计算机上MySQL的数据目录就是 /var/lib/mysql/

(2)相关命令目录

  1. 安装目录下非常重要的bin目录,它里面存储了许多关于控制客户端程序和服务器程序的命令(许多可执行文件,比如mysql,mysqld,mysqld_safe等)。而数据目录是用来存储MySQL在运行过程中产生的数据,注意区分开二者
  2. 如图:
  3. 再输入ls,可以看到很多关于mysql的命令
  4. 还可以通过这种方式直接找到关于mysql的命令

(3)配置文件目录

  1. 配置文件目录:/usr/share/mysql-8.0(命令及配置文件),/etc/my.cnf
  2. 可以看到:

二、数据库和文件系统的关系

(1)查看默认数据库

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

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

  1. 使用CREATE DATABASE 数据库名语句创建一个数据库的时候,在文件系统上实际发生了什么呢?其实很简单,每个数据库都对应数据目录下的一个子目录,或者说对应一个文件夹,每当新建一个数据库时,MySQL会帮我们做两件事
    1. 在数据目录下,创建一个和数据库名同名的子目录
    2. 在与该数据库同名的子目录下创建一个名为db.opt的文件(仅限于MySQL5.7及之前的版本),这个文件中包含了该数据库的各种属性,比如该数据库的字符集和比较规则
  2. 在InnoDB存储引擎下(MySQL5.7)版本(.frm文件是用来存储表结构的,.ibd文件是用来存储表数据的)
  3. 表数据可以存放在.ibd文件中,也可以存放在/var/lib/mysql下的ibdata1数据库中
  4. 在InnoDB存储引擎下(MySQL8.0)版本(与5.7版本相比,没有db.opt文件,也没有表对应的.frm文件)

(3)表在文件系统中的表示

2.3.1InnoDB存储引擎模式

  1. 为了保存表结构, InnoDB在数据目录下对应的数据库子目录下创建了一个专门用于描述表结构的文件 ,文件名是这样:表名.frm
  2. .frm文件 的格式在不同的平台上都是相同的。这个后缀名为.frm是以 二进制格式 存储的,我们直接打开是乱码的
  3. 系统表空间(system tablespace):
    1. 默认情况下,InnoDB会在数据目录下创建一个名为 ibdata1 、大小为12M的文件,这个文件就是对应的系统表空间在文件系统上的表示。怎么才12M?注意这个文件是自扩展文件 ,当不够用的时候它会自己增加文件大小
    2. 当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得原来的 ibdata1 这个文件名 难听,那可以在MySQL启动时配置对应的文件路径以及它们的大小,比如我们这样修改一下my.cnf 配置 文件:
  4. 独立表空间(file-per-table tablespace):
    1. 在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为每一个表建立一个独立表空间 ,也就是说我们创建了多少个表,就有多少个独立表空间。使用独立表空间来存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相同,只不过添加了一个.ibd 的扩展名而已,所以完整的文件名称长这样:表名.ibd
  5. 系统表空间与独立表空间的设置:我们可以自己指定使用系统表空间还是 独立表空间来存储数据,这个功能由启动参数innodb_file_per_table控制,比如说我们想刻意将表数据都存储到 系统表空间时,可以在启动 MySQL服务器的时候这样配置:
    [server]
    innodb_file_per_table=0 # 0:代表使用系统表空间; 1:代表使用独立表空间

  6. 其他类型的表空间:随着MySQL的发展,除了上述两种老牌表空间之外,现在还新提出了一些不同类型的表空间,比如通用 表空间(general tablespace)、临时表空间(temporary tablespace)等
  7. 疑问:.frm在MySQL8中不存在了,那去哪里了呢?这就需要解析ibd文件。Oracle官方提供了一个应用程序ibd2sdi。这个工具不需要下载,MySQL8自带的有,只要你配置好环境变量就能到处用
    1. 查看表结构:到存储ibd文件的目录下,执行下面的命令:
      ibd2sdi --dump-file=emp1.txt emp1.ibd

2.3.2MyISAM存储引擎模式

  1. 举例:创建一个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. 可以看到MyISAM引擎下(MySQL5.7版本),创建一张表,就会生成.frm文件、.MYD文件、.MYI文件
  3. 表结构:在存储表结构方面,MyISAM 和InnoDB一样,也是在数据目录下对应的数据库子目录下创建了一个专门用于描述表结构的文件:.frm
  4. 表中数据和索引:在MyISAM中的索引全部都是二级索引,该存储引擎的数据和索引是分开存放的。所以在文件系统中也是使用不同的文件来存储数据文件(.MYD)和索引文件(.MYI),同时表数据都存放在对应的数据库子目录下
  5. 可以看到MyISAM引擎下(MySQL8.0版本),创建一张表,就会生成.sdi文件、.MYD文件、.MYI文件
  6. 可以发现,在之前的数据库版本中,MyISAM引擎已存在.frm文件,但是在MySQL8之后也和InnoDB引擎一样去掉了,放入了sdi文件中

(4)小结

举例:数据库a,表b

  1. 如果表b采用InnoDB,data\a中会产生1个或2个文件
    1. 如果是MySQL5.7版本,会在data/a的目录下生成db.opt文件用于保存数据库的相关配置。比如:字符集、比较规则。然后给表生成.frm文件和.ibd文件,.frm文件用于描述表结构、字段长度等。如果是采用系统表空间模式的,数据和索引信息都存储在ibdata1中,如果是采用独立表空间模式的,数据和索引信息都存储在.ibd文件中
    2. 如果是MySQL8.0版本,它不再单独提供db.opt文件。也不再提供b.frm文件,而是合并在.ibd文件中
  2. 如果表b采用MyISAM,data\a中会产生3个文件:
    1. MySQL5.7中:b.frm描述表结构,字段长度等;MySQL8.0中:b_xxx.sdi描述表结构、字段长度等
    2. b.MYD:数据信息文件,存储数据信息(如果采用独立表存储模式)
    3. b.MYI:存放索引信息文件

(5)视图在文件系统中的表示

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

(6)其他的文件

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

  1. 服务器进程文件:我们知道每运行一个MySQL服务器程序,都意味着启动一个进程。MySQL服务器会把自己的进程ID写入到一个文件中
  2. 服务器日志文件:在服务器运行过程中,会产生各种各样的日志,比如常规的查询日志、错误日志、二进制日志、redo日志等。这些日志各有各的用途,后面讲解
  3. 默认/自动生成的SSL和RSA证书和密钥文件:主要是为了客户端和服务器安全通信而创建的一些文件

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

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

相关文章

【C++篇】红黑树的实现

目录 前言: 一,红黑树的概念 1.1,红黑树的规则 1.2,红黑树的最长路径 1.3,红黑树的效率分析 二,红黑树的实现 2.1,红黑树的结构 2.2,红黑树的插入 2.2.1,大致过程…

UDP报文格式

UDP是传输层的一个重要协议,他的特性有面向数据报、无连接、不可靠传输、全双工。 下面是UDP报文格式: 1,报头 UDP的报头长度位8个字节,包含源端口、目的端口、长度和校验和,其中每个属性均为两个字节。报头格式为二…

解锁转型密码:不同方向的技能与素质修炼手册

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 解锁…

HTML中最基本的东西

本文内容的标签,将是看懂HTML的最基本之基本 ,是跟您在写文章时候一样内容。一般想掌握极其容易,但是也要懂得如何使用,过目不忘,为手熟尔。才是我们学习的最终目的。其实边看边敲都行,或者是边看边复制粘贴…

NodeJS | 搭建本地/公网服务器 live-server 的使用与安装

目录 介绍 安装 live-server 安装方法 安装后的验证 环境变量问题 Node.js 环境变量未配置正确 全局安装的 live-server 路径未添加到环境变量 运行测试 默认访问主界面 访问文件 报错信息与解决 问题一:未知命令 问题二:拒绝脚本 公网配置…

【excel】VBA股票数据获取(搜狐股票)

文章目录 一、序二、excel 自动刷新股票数据三、付费获取 一、序 我其实不会 excel 的函数和 visual basic。因为都可以用matlab和python完成。 今天用了下VBA,还挺不错的。分享下。 上传写了个matlab获取股票数据的,是雅虎财经的。这次是搜狐股票的数…

Redis的过期策略、内存淘汰机制

Redis只能存5G数据,可是你写了10G,那会删5G的数据。怎么删的?还有,你的数据已经设置了过期时间,但是时间到了,为什么内存占用率还是比较高? 一、Redis的过期策略 Redis采用的是定期删除惰性删除策略。 1…

C语言结构体漫谈:从平凡中见不平凡

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文《1》 结构体的两种声明一、结构…

redis(2:数据结构)

1.String 2.key的层级格式 3.Hash 4.List 5.Set 6.SortedSet

OCP使用中的常见问题与解决方法

OCP的常见问题 页面卡顿: 遇到页面卡顿的问题时,首先需要区分是全局性的卡顿,即所有页面都出现延迟或响应缓慢,还是仅限于特定的监控页面。 监控数据看不到: 需要明确是全部数据都无法查看,还是仅限于特定集群的数…

第三十八章 Spring之假如让你来写MVC——适配器篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

【开源免费】基于SpringBoot+Vue.JS企业OA管理系统(JAVA毕业设计)

本文项目编号 T 135 ,文末自助获取源码 \color{red}{T135,文末自助获取源码} T135,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

(12)springMVC文件的上传

SpringMVC文件上传 首先是快速搭建一个springMVC项目 新建项目mvn依赖导入添加webMoudle添加Tomcat运行环境.在配置tomcat时ApplicationContext置为"/"配置Artfact的lib配置WEB-INF配置文件(记得添加乱码过滤)配置springmvc-servlet文件&…

【华为路由/交换机的ftp文件操作】

华为路由/交换机的ftp文件操作 PC:10.0.1.1 R1:10.0.1.254 / 10.0.2.254 FTP:10.0.2.1 S1:无配置 在桌面创建FTP-Huawei文件夹,里面创建config/test.txt。 点击上图中的“启动”按钮。 然后ftp到server,…

虚拟拨号技术(GOIP|VOIP)【基于IP的语音传输转换给不法分子的境外来电披上一层外衣】: Voice over Internet Protocol

文章目录 引言I 虚拟拨号技术(GOIP|VOIP)原理特性:隐蔽性和欺骗性II “GOIP”设备原理主要功能III 基于IP的语音传输 “VOIP” (Voice over Internet Protocol)IV “断卡行动”“断卡行动”目的电信运营商为打击电诈的工作V 知识扩展虚拟号保护隐私虚拟运营商被用于拨打骚扰…

获取当前页面的url相关信息

引言:如何通过javascript获取当前html页面的链接信息 let currentUrl window.location.href; let protocol window.location.protocol; // 协议 let host window.location.host; // 主机名和端口 let hostname window.location.hostname; // 主机名 le…

【C++】size_t全面解析与深入拓展

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯一、什么是size_t?为什么需要size_t? 💯二、size_t的特性与用途1. size_t是无符号类型示例: 2. size_t的跨平台适应性示例对…

Quinlan C4.5剪枝U(0,6)U(1,16)等置信上限如何计算?

之前看到Quinlan中关于C4.5决策树算法剪枝环节中,关于错误率e置信区间估计,为啥 当E=0时,U(0,1)=0.75,U(0,6)=0.206,U(0,9)=0.143? 而当E不为0时,比如U(1,16)=0.157,如图: 关于C4.5决策树,Quinlan写了一本书,如下: J. Ross Quinlan (Auth.) - C4.5. Programs f…

怎么进行论文选题?有没有AI工具可以帮助~

论文选题听起来简单,做起来难!尤其是对于我们这群即将毕业的“学术小白”。记得那天导师布置完任务,我整个人就陷入了深深的沉思(其实是发呆)。直到室友神秘兮兮地告诉我:“你知道AI现在能帮人选题了吗&…

windows 极速安装 Linux (Ubuntu)-- 无需虚拟机

1. 安装 WSL 和 Ubuntu 打开命令行,执行 WSL --install -d ubuntu若报错,则先执行 WSL --update2. 重启电脑 因安装了子系统,需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示,输入账号,密…