MySQL高级02-MySQL的数据目录

news2025/7/21 23:32:11

1.MySQL8的主要目录结构

查看MySQL的目录结构

find / -name mysql

image.png

1.1 数据库文件的存放路径

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

mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.04 sec)

从结果中可以看出,在我的计算机上MySQL的数据目录就是 /var/lib/mysql/

1.2 相关命令目录

相关命令目录:/usr/bin(mysqladmin、mysqlbinlog、mysqldump等命令)和/usr/sbin。
image.png

1.3 配置文件目录

配置文件目录:/usr/share/mysql-8.0(命令及配置文件),/etc/mysql(如my.cnf)
image.png

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

2.1 查看默认数据库

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

mysql> SHOW DATABASES;

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

  • mysql

MySQL 系统自带的核心数据库,它存储了MySQL的用户账户和权限信息,一些存储过程、事件的定 义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。

  • information_schema

MySQL 系统自带的数据库,这个数据库保存着MySQL服务器 维护的所有其他数据库的信息 ,比如有 哪些表、哪些视图、哪些触发器、哪些列、哪些索引。这些信息并不是真实的用户数据,而是一些 描述性信息,有时候也称之为 元数据 。在系统数据库 information_schema 中提供了一些以 innodb_sys 开头的表,用于表示内部系统表。

mysql> USE information_schema;
Database changed
mysql> SHOW TABLES LIKE 'innodb_sys%';
+--------------------------------------------+
| Tables_in_information_schema (innodb_sys%) |
performance_schema
MySQL 系统自带的数据库,这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,可以
用来 监控 MySQL 服务的各类性能指标 。包括统计最近执行了哪些语句,在执行过程的每个阶段都
花费了多长时间,内存的使用情况等信息。
sys
MySQL 系统自带的数据库,这个数据库主要是通过 视图 的形式把 information_schema 和
performance_schema 结合起来,帮助系统管理员和开发人员监控 MySQL 的技术性能。
2.2 数据库在文件系统中的表示
看一下我的计算机上的数据目录下的内容:
+--------------------------------------------+
| INNODB_SYS_DATAFILES |
| INNODB_SYS_VIRTUAL |
| INNODB_SYS_INDEXES |
| INNODB_SYS_TABLES |
| INNODB_SYS_FIELDS |
| INNODB_SYS_TABLESPACES |
| INNODB_SYS_FOREIGN_COLS |
| INNODB_SYS_COLUMNS |
| INNODB_SYS_FOREIGN |
| INNODB_SYS_TABLESTATS |
+--------------------------------------------+
10 rows in set (0.00 sec)
  • performance_schema

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

  • sys

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

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

看一下我的计算机上的数据目录下的内容:

[root@dhnsoft01 mysql]# cd /var/lib/mysql
[root@dhnsoft01 mysql]# ll
总用量 188868
-rw-r-----. 1 mysql mysql       56 1016 14:39 auto.cnf
-rw-r-----. 1 mysql mysql     2869 1017 17:03 binlog.000001
-rw-r-----. 1 mysql mysql       16 1016 14:40 binlog.index
-rw-------. 1 mysql mysql     1676 1016 14:39 ca-key.pem
-rw-r--r--. 1 mysql mysql     1112 1016 14:39 ca.pem
-rw-r--r--. 1 mysql mysql     1112 1016 14:39 client-cert.pem
-rw-------. 1 mysql mysql     1676 1016 14:39 client-key.pem
drwxr-x---. 2 mysql mysql      104 1017 17:03 dbtest1
-rw-r-----. 1 mysql mysql   196608 1017 17:03 #ib_16384_0.dblwr
-rw-r-----. 1 mysql mysql  8585216 1016 14:39 #ib_16384_1.dblwr
-rw-r-----. 1 mysql mysql     5870 1016 14:39 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 1017 17:03 ibdata1
-rw-r-----. 1 mysql mysql 50331648 1017 17:03 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 1016 14:39 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 1016 14:40 ibtmp1
drwxr-x---. 2 mysql mysql      187 1016 14:40 #innodb_temp
drwxr-x---. 2 mysql mysql      143 1016 14:39 mysql
-rw-r-----. 1 mysql mysql 25165824 1017 17:03 mysql.ibd
srwxrwxrwx. 1 mysql mysql        0 1016 14:40 mysql.sock
-rw-------. 1 mysql mysql        6 1016 14:40 mysql.sock.lock
drwxr-x---. 2 mysql mysql     8192 1016 14:39 performance_schema
-rw-------. 1 mysql mysql     1676 1016 14:39 private_key.pem
-rw-r--r--. 1 mysql mysql      452 1016 14:39 public_key.pem
-rw-r--r--. 1 mysql mysql     1112 1016 14:39 server-cert.pem
-rw-------. 1 mysql mysql     1680 1016 14:39 server-key.pem
drwxr-x---. 2 mysql mysql       28 1016 14:39 sys
-rw-r-----. 1 mysql mysql 16777216 1016 20:47 undo_001
-rw-r-----. 1 mysql mysql 16777216 1017 17:03 undo_002

这个数据目录下的文件和子目录比较多,除了 information_schema 这个系统数据库外,其他的数据库 在 数据目录 下都有对应的子目录。
以我的 dbtest1 数据库为例,在MySQL8.0 中打开:

[root@dhnsoft01 mysql]# cd dbtest1
[root@dhnsoft01 dbtest1]# ll
总用量 92
-rw-r-----. 1 mysql mysql 114688 1016 20:46 emp1.ibd
-rw-r-----. 1 mysql mysql   4330 1017 17:03 student_myisam_361.sdi
-rw-r-----. 1 mysql mysql      0 1017 17:03 student_myisam.MYD
-rw-r-----. 1 mysql mysql   1024 1017 17:03 student_myisam.MYI

2.3 表在文件系统中的表示

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. 表中数据和索引
  2. 系统表空间(system tablespace)

默认情况下,InnoDB会在数据目录下创建一个名为 ibdata1 、大小为 12M 的文件,这个文件就是对应 的** 系统表空间 **在文件系统上的表示。怎么才12M?注意这个文件是 自扩展文件 ,当不够用的时候它会自 己增加文件大小。
当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得原来的 ibdata1 这个文件名难听,那可以在MySQL启动时配置对应的文件路径以及它们的大小,比如我们这样修改一下my.cnf 配置 文件:

[server]
innodb_data_file_path=data1:512M;data2:512M:autoextend
  1. 独立表空间(file-per-table tablespace) ’

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

表名.ibd

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

test.frm
test.ibd

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

  1. 系统表空间与独立表空间的设置

我们可以自己指定使用 系统表空间 还是 独立表空间 来存储数据,这个功能由启动参数** innodb_file_per_table **控制,比如说我们想刻意将表数据都存储到 **系统表空间 **时,可以在启动 MySQL服务器的时候这样配置:

[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.01 sec)
  1. 其他类型的表空间

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

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文件中。

  1. 如果表b采用 MyISAM ,data\a中会产生3个文件:
  2. MySQL5.7 中: b.frm :描述表结构文件,字段长度等。
  3. MySQL8.0 中 b.xxx.sdi :描述表结构文件,字段长度等
  4. b.MYD (MYData):数据信息文件,存储数据信息(如果采用独立表存储模式)
  5. **b.MYI **(MYIndex):存放索引信息文件

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

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

相关文章

MAT查找类(岔路口)-技巧

文章目录 前言一、现状二、使用步骤1.导出 hprof2.用MAT打开3.细节操作找大对象的线程名称查看线程的详情查找类的GC Roots柳暗花明检验真理 总结 前言 又是java 内存溢出 OOM JAVA MAT 分析工具大大的好。 高效查找问题根源,才是硬道理。 一、现状 mat 打开hprof…

app.json: [“usingComponents“][“van-icon“]: “@vant/weapp/icon/index“ 未找到

维护一个微信小程序的项目,运行报错如下: app.json: ["usingComponents"]["van-icon"]: "vant/weapp/icon/index" 未找到解决办法 我只说我用到的,如果解决不了你的问题,详细的可以参照官方文档&…

git的介绍和安装、常用命令、忽略文件

git介绍和安装 首页功能写完了 ⇢ \dashrightarrow ⇢ 正常应该提交到版本仓库 ⇢ \dashrightarrow ⇢ 大家都能看到这个 ⇢ \dashrightarrow ⇢ 运维应该把现在这个项目部署到测试环境中 ⇢ \dashrightarrow ⇢ 测试开始测试 ⇢ \dashrightarrow ⇢ 客户可以看到目前做的…

使用 Python 和蒙特卡罗计算未来股价走势以及历史波动率和隐含波动率

一、简介 预测金融市场是定量精度和全球经济细微差别的复杂融合。在这一探索中,蒙特卡罗模拟脱颖而出,成为首要的统计工具,指导我们对未来股票价格的理解。 这种方法以摩纳哥著名的蒙特卡洛赌场命名,并不依靠运气,而是植根于严格的概率模型。想象一下在受控环境中精心策划…

Jmeter执行接口自动化测试-如何初始化清空旧数据

需求分析: 每次执行完自动化测试,我们不会执行删除接口把数据删除,而需要留着手工测试,此时会导致下次执行测试有旧数据我们手工可能也会新增数据,导致下次执行自动化测试有旧数据 下面介绍两种清空数据的方法 一、通过…

DIN模型和SIM模型原理与实践

文章目录 1.DIN模型原理缺点 2.SIM模型原理算法步骤1.查找2.注意力机制 参考文献 1.DIN模型 原理 计算用户Last N向量的加权平均权重是候选物品与Last N物品的相似度 缺点 注意力层的计算量正比于n(用户行为序列的长度)只能记录最近的几百个物品&…

HANA:计算视图-图形化Aggregation组件-踩坑小记(注意事项)

今天遇到在做HANA视图开发的时候,遇到一个事,一直以为是个BUG,可把我气坏了,具体逻辑是这样的,是勇图形化处理的,ACDOCA innerjoin 一个时间维度表,就这么简单,完全按照ACDOCA的主键…

​换电站:一个「利用户、利蔚来、利电力改革」的能源产品

换电的本质是什么? 我相信连蔚来车主自己也不是很清楚,不就是目前体验最接近油车的补能方式吗,还有什么? 「换电站是分布在城市中的采集和存储能源的触点,除了可为电动车用户加电,将来结合储能还有很多想象…

PAM从入门到精通(四)

接前一篇文章:PAM从入门到精通(三) 本文参考: 《The Linux-PAM Application Developers Guide》 先再来重温一下PAM系统架构: 更加形象的形式: 五、主要函数详解 1. pam_start 概述: PAM事务…

添加Mybatis框架支持

配置环境 1.老项目 在pom.xml中使用generate ->edit starts->添加下面俩 2.新项目 然后运行发现会有报错 2.1这是因为没有配置数据库连接信息 spring:datasource:url: jdbc:mysql://localhost:3306/java2023?characterEncodingutf8&useSSLfalse # MySQL数…

2024泰晤士世界大学排名公布(附Top200榜单)

近日,泰晤士高等教育世界大学排名(THE)发布了2024世界大学榜单,这表明全球高等教育领域的四大主流排名(QS、U.S. News、ARWU、THE)都已经尘埃落定。知识人网小编整理了泰晤士TOP前200的榜单,供访…

数据挖掘十大算法--Apriori算法

一、Apriori 算法概述 Apriori 算法是一种用于关联规则挖掘的经典算法。它用于在大规模数据集中发现频繁项集,进而生成关联规则。关联规则揭示了数据集中项之间的关联关系,常被用于市场篮分析、推荐系统等应用。 以下是 Apriori 算法的基本概述&#x…

发面试题:(四)synchronized和lock区别

synchronized 关键字 synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它 修饰的方法或者代码块在任意时刻只能有一个线程执行。 另外,在 Java 早期版本中, synchronized属于重量级锁,效率…

20-数据结构-内部排序-插入排序

简介:插入排序基本有两步,先是通过比较,得到插入位置,随后移动给需要插入的位置处腾空,最后进行值的插入。 目录 一、直接插入排序 1.1简介: 1.2代码 二、折半插入排序 2.1简介: 2.2代码…

vue项目获得开源代码之后跳过登录界面

readme运行 进入到账号和密码 找到main.js 比如说,以上这段代码 剩下next()就成功进入了

SAP MM学习笔记37 - 请求书照合中的 追加请求/追加Credit 等概念/ 请求书的取消

有关请求书照合,之前学习了一部分,现在再来学其中的一些概念。 其实这些概念也许并不常用,但是你又不能不知道,因为客户会问。 有关请求书,贴一些以前学习的文章,以方便阅读。 SAP MM学习笔记33 - 请求书…

雷达人体感应器成品方案,智能化空间联动交互,人体存在触发应用

随着科技的快速发展,智能化已经成为我们生活中不可或缺的一部分。在酒店、会议室和办公室等场合,智能化更是显得尤为重要。 智能雷达感应器成品设备能够实时监测人体的静止存在,精准地探测人体存在,进而触发联动设备,…

【C++】BMI身体质量指数计算工具

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍BMI身体质量指数计算工具。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷…

信创办公–基于WPS的Word最佳实践系列 (图文环绕方式)

信创办公–基于WPS的Word最佳实践系列 (图文环绕方式) 目录 应用背景操作步骤1、 打开布局选项中图文环绕方式的方法2、 图文环绕三大类型 应用背景 在Word中,对文字和图片进行排版时,采用各种不同的图片与文字组合效果能够使页面…

Python基础教程:装饰器的详细教程

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 一、什么是装饰器 目的:给func()方法,增加一个功能,在fun()执行期间,同时把fun()执行速率机算出来 import time def func():print(嘻嘻哈哈)start_time time.time() ti…