01_02_mysql09_MySQL的数据目录

MySQL的数据目录


														学习再总结宋红康老师课程内容

1.MySQL8的主要目录结构

安装好MySQL8之后,查看如下的目录结构

find / -name mysql

1.1数据库文件的存放路径

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.数据库和文件系统的关系

2.1查看默认数据库

查看一下在我的计算机上当前有哪些数据库:

SHOW DATABASES;

可以看到有4个数据库是属于MySQL自带的系统数据库

  • mysql

  • information_schema

  • performance_schema
    MySQL系统自带的数据库,这个数据库主要保存MySQL服务器运行过程中的一些状态信息,可以用来监控MySQL服务的各类性能指标。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等信息。

  • sys
    MySQL系统自带的数据库,这个数据库主要是通过视图的形式把information_schemaperformance_schema结合起来,帮助系统管理员和开发人员监控MySQL的技术性能。

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

1.在数据目录下创建一个和数据库名同名的子目录。
2.在与该数据库名同名的子目录下创建一个名为db.opt的文件(仅限MySQL5.7及之前版本),这个文件中包含了该数据库的各种属性,比如该数据库的字符集和比较规则。

2.3 表在文件系统中的表示

2.3.1InnoDB存储引擎模式

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

表名.frm

2.表中数据和索引
①系统表空间(system tablespace)
默认情况下,InnoDB会在数据目录下创建一个名为ibdata1,大小为12M的文件,这个文件就是对应的系统表空间在文件系统上的表示。该文件是自扩展文件,当不够用时会自己增加文件大小。
也可以让系统表空间对应的文件系统上多个实际文件,或者修改原来的ibata1的名字,此时需要在MySQL启动时配置对应的文件路径以及它们的大小,如作以下修改:

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

这样在MySQL启动之后就会创建这两个512M大小的文件作为系统表空间,其中的autoextend表明这两个文件如果不够用会自动扩展data2文件的大小。
需要注意:在一个MySQL服务器中,系统表空间只有一份。从MySQL5.5.7到MySQL5.6.6之间的各个版本中,我们表中的数据都会呗默认存储到这个系统表空间。
②独立表空间(file-per-table tablespace)
在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为每一个表建立一个独立表空间,也就是说我们创建了多少个表,就有多少个独立表空间。使用独立表空间来存储表数据的话,会在该表所属数据库对应的子目录下创建一个表述该独立表空间的文件,文件名和表名相同,只不过添加了一个==.ibd==的扩展名而已,完整的文件名称位:

表名.ibd

③系统表空间与独立表空间的设置
我们可以自己指定使用系统表空间还是独立表空间来存储数据,这个给你由参数innodb_file_per_table控制,如下:

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

默认情况:

mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)

innodb_file_per_table的修改只对新建的表起作用,对于已经分配了表空间的表并不起作用。如果想把已经存储在系统表空间中的表专业到独立表空间,可以使用下边的语法:

ALTER TABLE test TABLESPACE innodb_system;

④其他类型的表空间
随着MySQL的发展,除了上述两种老牌表空间之外,现在还新提出一些不同类型的表空间,比如通用表空间(general tablespace)、临时表空间(temporary tablespace)等。
3.疑问
.frm在MySQL8中不存在了
需要解析ibd文件。Orcale官方将frm文件的信息及更多信息移动到叫做序列化字典信息(Serialized Dictionary Information,SDI),SDI被卸载ibd文件内部。MySQL8.0属于Oracle旗下,同理。
为了从IBD文件中提取SDI信息,Oracle提供了一个应用程序ibd2sdi。
这个工具MySQL8自带就有。
(1)查看表结构
到存储ibd文件的目录下,执行下面的命令:

ibd2sdbi --dump-file=student.txt student.ibd
[root@guoyvzhimysql8 mysql]# cd sys
[root@guoyvzhimysql8 sys]# ll
总用量 80
-rw-r-----. 1 mysql mysql 114688 2月  22 14:23 sys_config.ibd
[root@guoyvzhimysql8 sys]# ibd2sdi --dump-file=sys_config.txt sys_config.ibd
[root@guoyvzhimysql8 sys]# ll
总用量 96
-rw-r-----. 1 mysql mysql 114688 2月  22 14:23 sys_config.ibd
-rw-------. 1 root  root   13644 2月  23 11:13 sys_config.txt
[root@guoyvzhimysql8 sys]# vim ./sys_config.txt 

在这里插入图片描述
图中标记分别表示

  • 表名
  • 列名
  • 列的长度
    通过上面的测试结果可以发现,MySQL8把之前版本的frm文件合并到ibd文件中了。
2.3.2 MyISAM存储引擎模式

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

表名.frm 5.7
表名.sdi 8.0

2.表中数据和索引
在MyISAM中的索引全部都是二级索引,该存储引擎的数据和索引是分开存放的。所以在文件系统中也是使用不同的文件来存储数据文件和索引文件,同时表数据都存放在对应的数据库子目录下。

表名.MYD  #存储数据
表名.MYI #存储索引

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.ftm:描述表结构文件,字段长度等。
    MySQL8.0中b.xxx.sdi:描述表结构文件,字段长度等。
  • b.MYD(MYData):数据信息文件,存储数据信息(如果采用独立表存储结构)
  • b.MYI(MYIndex):存放索引信息文件

2.5视图在文件系统的表示

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

2.6其他的文件

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络面经_体系结构一文说清

编辑:平平无奇的羊 目录 基础 1. 计算机网络结构体系 三种模型之间的区别: 如何背诵: 进阶 OSI七层模型: TCP/IP四层模型: TCP/IP五层模型 总结 字节实习生为大家带来的是计算机网络面经系列博文,由浅…

【Flink数据传输(一)】NetworkStack架构概述:实现tm之间的数据交换

文章目录 1. NetworkStack整体架构2. StreamTask内数据流转过程 NetworkStack提供了高效的网络I/O和反压控制 除了各个组件之间进行RPC通信之外,在Flink集群中TaskManager和TaskManager节点之间也会发生数据交换,尤其当用户提交的作业涉及Task实例运行在…

c编译器学习07:minilisp编译器改造(debug模式支持调试)

问题 原版的minilisp编译器不支持argv输入测试,不方便单步调试。 代码改造目标是既不改变原有程序的各种功能, 又能支持个人习惯的vs单步debug模式。 CMakeLists.txt变更 定义DEBUG宏 解决单步调试源码定位偏差问题 cmake_minimum_required(VERSION …

springboot邮箱注册

1.准备工作 操作之前准备两个邮箱 我准备了网易邮箱和QQ邮箱,网易邮箱用来发送验证码,QQ邮箱用来做注册(希望大家和我一样,不然可能会出错 ) 发送验证码的邮箱需要开启一些设置,否则不…

windows server2008前后端项目部署

目录 一.部署环境 准备一个windows server 2008的镜像 准备jdk1.8 准备tomcat服务器 准备mysql数据库 二.部署步骤 1.1新建虚拟机 1.2打开远程 连接宿主机远程桌面 1.3下载安装jdk 修改path 1.4安装tomcat 1.5.安装mysql mysql安装成功 把war包丢到tomcat webapp里面去…

Selenium IDE插件录制网页,解放双手

1、 国内下载地址 https://www.crx4chrome.com/crx/77585/ ,这个网络正常基本可以下载,目前最新版本是3.17.2。 点击Crx4Chrome下载。下载后的文件名称是:mooikfkahbdckldjjndioackbalphokd-3.17.2-Crx4Chrome.com.crx。 2、 安装 直接打开…

【MySQL】数据库概述

目录 一、为什么使用数据库? 二、数据库与数据库管理系统 2.1 相关概念 2.2 两者关系 三、 MySQL介绍 四、 RDBMS和非RDBMS 4.1 关系型数据库(RDBMS) 4.2 非关系型数据库(非RDBMS) 五、关系型数据库设计规则 …

挑战杯 基于卷积神经网络的乳腺癌分类 深度学习 医学图像

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度,召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

QT问题 打开Qt Creator发现没有菜单栏

之前不知道按了什么快捷键,当我再次打开Qt Creator时发现菜单栏消失啦 找了许多原因发现:安装有道词典的快捷键Ctrl Alt m 与Qt Creator里的快捷键冲突导致菜单栏被莫名其妙的隐藏 解决方法: 1找到有道词典快捷键 2再次按快捷键 Ctrl Alt m就可以重新显示菜单栏

机器学习---强化学习方法

1. 强化学习方法 1.1 动态规划法 动态规划方法是由Bellman 方程转化而来,通过修正Bellman 方程的规则,提高所期望值函数的近 似值。常用算法有两种:值迭代(Value Iteration)和策略迭代(Policy Iteration…

[云原生] 二进制k8s集群(下)部署高可用master节点

在上一篇文章中,就已经完成了二进制k8s集群部署的搭建,但是单机master并不适用于企业的实际运用(因为单机master中,仅仅只有一台master作为节点服务器的调度指挥,一旦宕机。就意味着整个集群的瘫痪,所以成熟…

较通用web脚手架模板搭建

较通用web脚手架模板搭建 从这里开始就接触到以后写项目的思维了。 做一个web开发,那就要层次分明,要有个实现的规划,这通常也是有一个较为通用的模板的。 总的来说:不同的层次有不同的模块,每个模块有必须实现的功…