Linux环境下MySQL的数据目录

2023-11-11

MySQL的数据目录

数据库文件的存放路径

MySQL数据库文件的存放路径:

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

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

相关命令目录

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

配置文件目录

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

在这里插入图片描述

数据库和文件系统的关系

查看默认数据库

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

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

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

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

2、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%) |
+--------------------------------------------+
| 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)

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

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

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

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

[root@VM-12-8-centos mysql-8.0]# cd /var/lib/mysql
[root@VM-12-8-centos mysql]# ll
total 188876
-rw-r----- 1 mysql mysql       56 Dec  1 15:10 auto.cnf
-rw-r----- 1 mysql mysql     3893 Dec  1 22:45 binlog.000001
-rw-r----- 1 mysql mysql      156 Dec  1 22:46 binlog.000002
-rw-r----- 1 mysql mysql       32 Dec  1 22:46 binlog.index
-rw------- 1 mysql mysql     1676 Dec  1 15:10 ca-key.pem
-rw-r--r-- 1 mysql mysql     1112 Dec  1 15:10 ca.pem
-rw-r--r-- 1 mysql mysql     1112 Dec  1 15:10 client-cert.pem
-rw------- 1 mysql mysql     1680 Dec  1 15:10 client-key.pem
-rw-r----- 1 mysql mysql   196608 Dec  1 22:48 #ib_16384_0.dblwr
-rw-r----- 1 mysql mysql  8585216 Dec  1 15:10 #ib_16384_1.dblwr
-rw-r----- 1 mysql mysql     3731 Dec  1 22:45 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Dec  1 22:46 ibdata1
-rw-r----- 1 mysql mysql 50331648 Dec  1 22:48 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Dec  1 15:10 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Dec  1 22:46 ibtmp1
drwxr-x--- 2 mysql mysql     4096 Dec  1 22:46 #innodb_temp
drwxr-x--- 2 mysql mysql     4096 Dec  1 15:10 mysql
-rw-r----- 1 mysql mysql 25165824 Dec  1 22:46 mysql.ibd
srwxrwxrwx 1 mysql mysql        0 Dec  1 22:46 mysql.sock
-rw------- 1 mysql mysql        5 Dec  1 22:46 mysql.sock.lock
drwxr-x--- 2 mysql mysql     4096 Dec  1 15:10 performance_schema
-rw------- 1 mysql mysql     1676 Dec  1 15:10 private_key.pem
-rw-r--r-- 1 mysql mysql      452 Dec  1 15:10 public_key.pem
-rw-r--r-- 1 mysql mysql     1112 Dec  1 15:10 server-cert.pem
-rw------- 1 mysql mysql     1676 Dec  1 15:10 server-key.pem
drwxr-x--- 2 mysql mysql     4096 Dec  1 15:10 sys
-rw-r----- 1 mysql mysql 16777216 Dec  1 22:48 undo_001
-rw-r----- 1 mysql mysql 16777216 Dec  1 22:48 undo_002
[root@VM-12-8-centos mysql]# 

这个数据目录下的文件和子目录比较多,除了 information_schema 这个系统数据库外,其他的数据库在 数据目录 下都有对应的子目录。

表在文件系统中的表示

InnoDB存储引擎模式

1、表结构

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

表名.frm

比方说我们在xdr数据库下创建一个名为test的表:

mysql> user xdr;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'user xdr' at line 1
mysql> use xdr;
Database changed
mysql> create table test (
    -> c1 INT
    -> );
Query OK, 0 rows affected (0.07 sec)

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

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

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

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

b、独立表空间(file-per-table tablespace)

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

表名.ibd

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

test.frm
test.ibd

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

c、系统表空间与独立表空间的设置
我们可以自己指定使用 系统表空间 还是 独立表空间 来存储数据,这个功能由启动参数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.00 sec)

d、其他类型的表空间

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

MyISAM存储引擎模式

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

表名.frm

2、表中数据和索引

在MyISAM中的索引全部都是 二级索引 ,该存储引擎的 数据和索引是分开存放 的。所以在文件系统中也是使用不同的文件来存储数据文件和索引文件,同时表数据都存放在对应的数据库子目录下。假如 test表使用MyISAM存储引擎的话,那么在它所在数据库对应的 xdr目录下会为 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux环境下MySQL的数据目录 的相关文章

  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • 来自守护程序的错误响应:加入会话密钥环:创建会话密钥:超出磁盘配额

    我尝试在我的服务器上安装 docker 使用本教程 https docs docker com install linux docker ce ubuntu 我想远程运行 docker 镜像并使用 portainer Web 界面来管理一切
  • 在 MacOSX10.6 上运行 python 服务器时 MySQLdb 错误

    运行我的服务器 python manage py runserver 产生以下错误 django core exceptions ImproperlyConfigured 加载 MySQLdb 模块时出错 没有名为 MySQLdb 的模块
  • ActiveRecord3死锁重试

    Rails 3 或 ActiveRecord 3 是否有任何插件可以复制旧版本死锁重试 http agilewebdevelopment com plugins deadlock retry插入 或者 该插件仍然适用于 Rails 3 吗
  • 当“修复表”查询在 mysql 中不起作用时该怎么办?

    我收到此错误 表的存储引擎不支持修复 当我尝试使用查询修复表时repair table tbl college master 表是 innodb 类型 但我不知道我收到此错误 See 手册 http dev mysql com doc re
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 比较表中的行以了解字段之间的差异

    我有一个包含 20 多列的表 客户端 其中大部分是历史数据 就像是 id clientID field1 field2 etc updateDate 如果我的数据如下所示 10 12 A A 2009 03 01 11 12 A B 200
  • 无法启动 MySQL 服务器 - 控制进程退出并出现错误代码

    我的 mysql 服务器停止后无法启动 命令使用 sudo etc init d mysql restart Error 重新启动 mysql 通过 systemctl mysql serviceJob for mysql service
  • MYSQL - 查找最近的前一天

    我可以以某种方式 不使用 PHP 找到一周中最近的前一天日期吗 Like 最近的上一个星期二的日期是哪一天 CURDATE INTERVAL WEEKDAY CURDATE wday IF WEEKDAY CURDATE gt wday 0
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • MySQL MIN/MAX 所有行

    我有桌子Races与行ID Name and TotalCP 我选择分钟 TotalCP FROM Races 但是我想选择具有最小值的整行 我如何在单个查询中做到这一点 从聚合值获取整行的一般形式是 SELECT FROM Races W
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c

随机推荐

  • 一个开源知识管理系统,满足企业定制化需求

    编者按 知识管理是企业加强竞争优势和核心竞争力的保证 开源知识管理系统更是块 香馍馍 本文分析了知识管理系统开源的意义 介绍了开源的知识管理系统 天翎KMS的特点 并进一步阐述了天翎KMS具体实现的功能 概要 1 为什么需要开源知识管理系统
  • C++虚函数表的理解、通过虚函数表访问非public成员函数

    阅读了陈皓老师的虚函数表解析 点击打开链接 以及虚函数表存放位置一文 点击打开链接 对C 如何实现多态应该有了个粗浅认识 1 虚函数表是一个数组 每个元素存储virtual函数的指针 2 如果一个类存在虚函数 编译器一般会将该类实例的前4
  • GJB 软件测试规范

    1 目的及范围 1 1 目的 本规范规定了软件测试的具体实施方法 主要从测试过程和测试管理方面论述 软件测试的目的是验证软件是否满足软件开发合同或任务书 系统 子系统设计文档 软件需求规格说明书和软件设计说明所规定的软件质量特性要求 通过测
  • Large Graph Models: A Perspective

    本文是LLM系列文章 针对 Large Graph Models A Perspective 的翻译 TOC 摘要 大型模型已成为人工智能 尤其是机器学习领域的最新突破性成就 然而 当涉及到图形时 大型模型并没有像在自然语言处理和计算机视觉
  • sqlserver用户登录失败

    问题场景描述 刚使用sql server创建用户后 重新登录时报错说登录失败 解决方案 先使用windows登录 然后进行如下操作
  • 在主函数里面调用fun函数,这样可以吗?

    Int fun Int a 5 Int p a Return p 请问 在主函数里面调用fun函数 这样可以吗 如果不可以 请说明为什么 并给出一种解决方案 a是局部变量 a 的作用域在fun内 p指向a的地址 在return的时候 a的生
  • Node.js学习笔记--fs 文件系统 writeFile函数

    前言 本章学习fs模块中的writeFile函数 即简单文件系统 所谓的简单 其实就是一种封装 把 1 打开文件 2 关闭文件 给封装到方法里面了 这样调用者使用的时候就方便了 1 使用例 先来看一段代码 var fs require fs
  • 【图像识别】基于支持向量机svm植物叶子疾病检测和分类

    最近在学习svm算法 借此文章记录自己的学习过程 在学习很多处借鉴了z老师的讲义和李航的统计 若有不足的地方 请海涵 svm算法通俗的理解在二维上 就是找一分割线把两类分开 问题是如下图三条颜色都可以把点和星划开 但哪条线是最优的呢 这就是
  • java jmap用法_java命令--jmap命令使用

    jdk安装后会自带一些小工具 jmap命令 Java Memory Map 是其中之一 主要用于打印指定Java进程 或核心文件 远程调试服务器 的共享对象内存映射或堆内存细节 jmap命令可以获得运行中的jvm的堆的快照 从而可以离线分析
  • 设计模式6-命令模式(Command)解析+案例实践+总结

    本文是对面向对象设计模式 命令模式 Command 的解析 主要分为定义解析 通过餐厅点餐案例 遥控器案例讲解命令模式 多案例练习加深对命令模式的理解 最后总结知识要点 第一篇 定义解析 命令模式是GoF四人帮整理的 设计模式 可复用面向对
  • mysql语句声明外键

    环境 在Navicat 中进行mysql的语句操作 示例 1 创建一张员工表 CREATE TABLE employ id INT PRIMARY KEY ename VARCHAR 20 deptId INT 2 插入员工数据 INSER
  • NodeJs的应用场景及实践

    前几天看到一篇文章 据说是WordPress4 3将用NodeJs重写 着实让人有点惊讶 后来了解到 其实并不是完全摒弃PHP 而是由NodeJs重写部分核心类 具体文章链接来源 附上链接 WordPress 4 3 将用 Node js
  • 驱动怎么学

    1 什么是驱动 1 1理解驱动的概念 1 驱动一词的字面意思 驱动就是让一个东西动起来 给一个东西动力 让它动起来 2 物理上的驱动 比如 一个球放在那儿没动 你踢了一下它 给了它一个力 给了力之后它就能动 就说明你驱动了它 这就是物理学上
  • 召唤神龙无敌版,轻松召唤神龙~

    还在被鲨鱼围着追吗 快来试试无敌版轻松通关 最新召唤神龙无敌版 地址 http minigame suyiboke com zhaohuanshenlongwdb index html 备用地址 推荐 https suyiboke com
  • osg与opengl中向量、矩阵的区别

    osg中的向量是行向量 矩阵相应也是与行向量对应 v M 矩阵最后一行对应的是平移 其它行列对应旋转和缩放 对角线元素值对应缩放值 inline void Matrixd preMultTranslate const Vec3d v for
  • GENERIC NETLINK 介绍及使用

    之前一篇博文讲述了Netlink如何使用 当时我们是自己定义了一种协议NETLINK TEST进行用户进程和内核的通信 这篇文章就讲一下如何使用内核为我们提供的NETLINK GENERIC进行通信 如果把Netlink协议比作IP层 那么
  • 从GitHub火到了博客,共计1658页的《Java岗面试核心MCA版》,拿走不谢

    2019年我凭借一份 Java面试核心知识点 成功拿下了阿里 字节 小米等大厂的offer 两年的时间 为了完成我给自己立的flag 拿下一线互联网企业offer大满贯 即使在职也一直在不断的学习与备战面试中 不得不说程序员除了做项目之外
  • 华为8月8日将推出系统云翻新功能:P40/Mate 30系列首发

    7月28日消息 7月28日消息 华为终端公司近日在微博上发布重要公告 宣布将于8月8日推出全新的系统云翻新功能 据悉 该功能将首次应用于华为 P40 系列手机和 Mate30 系列手机 为用户提供更便捷的手机数据备份和恢复体验 系统云翻新功
  • 在ubuntu上安装Ocaml的RPM包的一点经验

    今天想在ubuntu上安装ocaml 3 10 1 1 fc7 src rpm 遇到了一些问题 其实很简单 但是记录下来防止以后忘了 如果输入 sudo apt get install alien ocaml 3 10 1 1 fc7 sr
  • Linux环境下MySQL的数据目录

    MySQL的数据目录 数据库文件的存放路径 MySQL数据库文件的存放路径 var lib mysql mysql gt show variables like datadir Variable name Value datadir var