首页 数据库 mysql教程 MySQL的数据目录(整理总结)

MySQL的数据目录(整理总结)

Jan 24, 2023 am 06:30 AM
mysql

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于mysql数据目录的相关问题,下面一起来看一下,希望对大家有帮助。

MySQL的数据目录(整理总结)

1. MySQL 8 的主要目录结构

安装好MySQL 8 之后,我们查看如下的目录结构:

1. 1 数据库文件的存放路径

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

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

1. 2 相关命令目录

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

1. 3 配置文件目录

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

[root@atguigu01 ~]# find / -name mysql
登录后复制
mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.04 sec)
登录后复制

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

2. 1 查看默认数据库

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

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

mysql

MySQL 系统自带的核心数据库,它存储了MySQL的用户账户和权限信息,一些存储过程、事件的定

义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。

information_schema

MySQL 系统自带的数据库,这个数据库保存着MySQL服务器维护的所有其他数据库的信息,比如有

哪些表、哪些视图、哪些触发器、哪些列、哪些索引。这些信息并不是真实的用户数据,而是一些

描述性信息,有时候也称之为元数据。在系统数据库information_schema中提供了一些以

innodb_sys开头的表,用于表示内部系统表。

mysql> SHOW DATABASES;
登录后复制
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)
登录后复制
[root@atguigu01 mysql]# cd /var/lib/mysql
[root@atguigu01 mysql]# ll
总用量 189980
-rw-r-----. 1 mysql mysql 56 7 月  28 00 :27 auto.cnf
-rw-r-----. 1 mysql mysql 179 7 月  28 00 :27 binlog.
-rw-r-----. 1 mysql mysql 820 7 月  28 01 :00 binlog.
-rw-r-----. 1 mysql mysql 179 7 月  29 14 :08 binlog.
-rw-r-----. 1 mysql mysql 582 7 月  29 16 :47 binlog.
-rw-r-----. 1 mysql mysql 179 7 月  29 16 :51 binlog.
-rw-r-----. 1 mysql mysql 179 7 月  29 16 :56 binlog.
-rw-r-----. 1 mysql mysql 179 7 月  29 17 :37 binlog.
-rw-r-----. 1 mysql mysql 24555 7 月  30 00 :28 binlog.
-rw-r-----. 1 mysql mysql 179 8 月 1 11 :57 binlog.
-rw-r-----. 1 mysql mysql 156 8 月 1 23 :21 binlog.
-rw-r-----. 1 mysql mysql 156 8 月 2 09 :25 binlog.
-rw-r-----. 1 mysql mysql 1469 8 月 4 01 :40 binlog.
-rw-r-----. 1 mysql mysql 156 8 月 6 00 :24 binlog.
-rw-r-----. 1 mysql mysql 179 8 月 6 08 :43 binlog.
-rw-r-----. 1 mysql mysql 156 8 月 6 10 :56 binlog.
-rw-r-----. 1 mysql mysql 240 8 月 6 10 :56 binlog.index
-rw-------. 1 mysql mysql 1676 7 月  28 00 :27 ca-key.pem
-rw-r--r--. 1 mysql mysql 1112 7 月  28 00 :27 ca.pem
-rw-r--r--. 1 mysql mysql 1112 7 月  28 00 :27 client-cert.pem
-rw-------. 1 mysql mysql 1676 7 月  28 00 :27 client-key.pem
drwxr-x---. 2 mysql mysql 4096 7 月  29 16 :34 dbtest
-rw-r-----. 1 mysql mysql 196608 8 月 6 10 :58 #ib_16384_0.dblwr
-rw-r-----. 1 mysql mysql 8585216 7 月  28 00 :27 #ib_16384_1.dblwr
-rw-r-----. 1 mysql mysql 3486 8 月 6 08 :43 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 8 月 6 10 :56 ibdata
-rw-r-----. 1 mysql mysql 50331648 8 月 6 10 :58 ib_logfile
登录后复制

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

在数据目录下都有对应的子目录。

以我的temp数据库为例,在MySQL 5. 7 中打开:

在MySQL 8. 0 中打开:

-rw-r-----. 1 mysql mysql 50331648 7 月  28 00 :27 ib_logfile
-rw-r-----. 1 mysql mysql 12582912 8 月 6 10 :56 ibtmp
drwxr-x---. 2 mysql mysql 4096 8 月 6 10 :56 #innodb_temp
drwxr-x---. 2 mysql mysql 4096 7 月  28 00 :27 mysql
-rw-r-----. 1 mysql mysql 26214400 8 月 6 10 :56 mysql.ibd
srwxrwxrwx. 1 mysql mysql 0 8 月 6 10 :56 mysql.sock
-rw-------. 1 mysql mysql 5 8 月 6 10 :56 mysql.sock.lock
drwxr-x---. 2 mysql mysql 4096 7 月  28 00 :27 performance_schema
-rw-------. 1 mysql mysql 1680 7 月  28 00 :27 private_key.pem
-rw-r--r--. 1 mysql mysql 452 7 月  28 00 :27 public_key.pem
-rw-r--r--. 1 mysql mysql 1112 7 月  28 00 :27 server-cert.pem
-rw-------. 1 mysql mysql 1680 7 月  28 00 :27 server-key.pem
drwxr-x---. 2 mysql mysql 4096 7 月  28 00 :27 sys
drwxr-x---. 2 mysql mysql 4096 7 月  29 23 :10 temp
-rw-r-----. 1 mysql mysql 16777216 8 月 6 10 :58 undo_
-rw-r-----. 1 mysql mysql 16777216 8 月 6 10 :58 undo_
登录后复制
[root@atguigu02 mysql]# cd ./temp
[root@atguigu02 temp]# ll
总用量 1144
-rw-r-----. 1 mysql mysql 8658 8 月  18 11 :32 countries.frm
-rw-r-----. 1 mysql mysql 114688 8 月  18 11 :32 countries.ibd
-rw-r-----. 1 mysql mysql 61 8 月  18 11 :32 db.opt
-rw-r-----. 1 mysql mysql 8716 8 月  18 11 :32 departments.frm
-rw-r-----. 1 mysql mysql 147456 8 月  18 11 :32 departments.ibd
-rw-r-----. 1 mysql mysql 3017 8 月  18 11 :32 emp_details_view.frm
-rw-r-----. 1 mysql mysql 8982 8 月  18 11 :32 employees.frm
-rw-r-----. 1 mysql mysql 180224 8 月  18 11 :32 employees.ibd
-rw-r-----. 1 mysql mysql 8660 8 月  18 11 :32 job_grades.frm
-rw-r-----. 1 mysql mysql 98304 8 月  18 11 :32 job_grades.ibd
-rw-r-----. 1 mysql mysql 8736 8 月  18 11 :32 job_history.frm
-rw-r-----. 1 mysql mysql 147456 8 月  18 11 :32 job_history.ibd
-rw-r-----. 1 mysql mysql 8688 8 月  18 11 :32 jobs.frm
-rw-r-----. 1 mysql mysql 114688 8 月  18 11 :32 jobs.ibd
-rw-r-----. 1 mysql mysql 8790 8 月  18 11 :32 locations.frm
-rw-r-----. 1 mysql mysql 131072 8 月  18 11 :32 locations.ibd
-rw-r-----. 1 mysql mysql 8614 8 月  18 11 :32 regions.frm
-rw-r-----. 1 mysql mysql 114688 8 月  18 11 :32 regions.ibd
登录后复制

2. 3 表在文件系统中的表示

2. 3. 1 InnoDB存储引擎模式

1. 表结构

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

件,文件名是这样:

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

那在数据库atguigu对应的子目录下就会创建一个名为test.frm的用于描述表结构的文件。.frm文件

的格式在不同的平台上都是相同的。这个后缀名为.frm是以二进制格式存储的,我们直接打开是乱码

的。

2. 表中数据和索引

① 系统表空间(system tablespace)

默认情况下,InnoDB会在数据目录下创建一个名为ibdata1、大小为12M的文件,这个文件就是对应

的系统表空间在文件系统上的表示。怎么才 12 M?注意这个文件是自扩展文件,当不够用的时候它会自

己增加文件大小。

当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得原来的ibdata1这个文件名

难听,那可以在MySQL启动时配置对应的文件路径以及它们的大小,比如我们这样修改一下my.cnf 配置

文件:

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

[root@atguigu01 mysql]# cd ./temp
[root@atguigu01 temp]# ll
总用量 1080
-rw-r-----. 1 mysql mysql 131072 7 月  29 23 :10 countries.ibd
-rw-r-----. 1 mysql mysql 163840 7 月  29 23 :10 departments.ibd
-rw-r-----. 1 mysql mysql 196608 7 月  29 23 :10 employees.ibd
-rw-r-----. 1 mysql mysql 114688 7 月  29 23 :10 job_grades.ibd
-rw-r-----. 1 mysql mysql 163840 7 月  29 23 :10 job_history.ibd
-rw-r-----. 1 mysql mysql 131072 7 月  29 23 :10 jobs.ibd
-rw-r-----. 1 mysql mysql 147456 7 月  29 23 :10 locations.ibd
-rw-r-----. 1 mysql mysql 131072 7 月  29 23 :10 regions.ibd
登录后复制
表名.frm
登录后复制
登录后复制
mysql> USE atguigu;
Database changed
登录后复制
mysql> CREATE TABLE test (
-> c1 INT
-> );
Query OK, 0 rows affected (0.03 sec)
登录后复制
[server]
innodb_data_file_path=data1:512M;data2:512M:autoextend
登录后复制

在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为每

一个表建立一个独立表空间,也就是说我们创建了多少个表,就有多少个独立表空间。使用独立表空间来

存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表

名相同,只不过添加了一个.ibd的扩展名而已,所以完整的文件名称长这样:

比如:我们使用了独立表空间去存储atguigu数据库下的test表的话,那么在该表所在数据库对应

的atguigu目录下会为test表创建这两个文件:

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

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

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

innodb_file_per_table控制,比如说我们想刻意将表数据都存储到系统表空间时,可以在启动

MySQL服务器的时候这样配置:

默认情况:

④ 其他类型的表空间

随着MySQL的发展,除了上述两种老牌表空间之外,现在还新提出了一些不同类型的表空间,比如通用

表空间(general tablespace)、临时表空间(temporary tablespace)等。

2. 3. 2 MyISAM存储引擎模式

1. 表结构

在存储表结构方面,MyISAM和InnoDB一样,也是在数据目录下对应的数据库子目录下创建了一个专

门用于描述表结构的文件:

2. 表中数据和索引

在MyISAM中的索引全部都是二级索引,该存储引擎的数据和索引是分开存放的。所以在文件系统中也是

使用不同的文件来存储数据文件和索引文件,同时表数据都存放在对应的数据库子目录下。假如test

表使用MyISAM存储引擎的话,那么在它所在数据库对应的atguigu目录下会为test表创建这三个文

件:

表名.ibd
登录后复制
test.frm
test.ibd
登录后复制
[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)
登录后复制
表名.frm
登录后复制
登录后复制

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

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):存放索引信息文件

test.frm 存储表结构
test.MYD 存储数据 (MYData)
test.MYI 存储索引 (MYIndex)
登录后复制
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;
登录后复制

推荐学习:mysql视频教程

以上是MySQL的数据目录(整理总结)的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1668
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
laravel入门实例 laravel入门实例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用于轻松构建 Web 应用程序。它提供一系列强大的功能,包括:安装: 使用 Composer 全局安装 Laravel CLI,并在项目目录中创建应用程序。路由: 在 routes/web.php 中定义 URL 和处理函数之间的关系。视图: 在 resources/views 中创建视图以呈现应用程序的界面。数据库集成: 提供与 MySQL 等数据库的开箱即用集成,并使用迁移来创建和修改表。模型和控制器: 模型表示数据库实体,控制器处理 HTTP 请求。

MySQL和PhpMyAdmin:核心功能和功能 MySQL和PhpMyAdmin:核心功能和功能 Apr 22, 2025 am 12:12 AM

MySQL和phpMyAdmin是强大的数据库管理工具。1)MySQL用于创建数据库和表、执行DML和SQL查询。2)phpMyAdmin提供直观界面进行数据库管理、表结构管理、数据操作和用户权限管理。

MySQL与其他编程语言:一种比较 MySQL与其他编程语言:一种比较 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。 MySQL以其高性能、可扩展性和跨平台支持着称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

解决数据库连接问题:使用minii/db库的实际案例 解决数据库连接问题:使用minii/db库的实际案例 Apr 18, 2025 am 07:09 AM

在开发一个小型应用时,我遇到了一个棘手的问题:需要快速集成一个轻量级的数据库操作库。尝试了多个库后,我发现它们要么功能过多,要么兼容性不佳。最终,我找到了minii/db,这是一个基于Yii2的简化版本,完美地解决了我的问题。

laravel框架安装方法 laravel框架安装方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了详细分步说明,指导读者如何轻松安装 Laravel 框架。Laravel 是一个功能强大的 PHP 框架,它 упростил 和加快了 web 应用程序的开发过程。本教程涵盖了从系统要求到配置数据库和设置路由等各个方面的安装过程。通过遵循这些步骤,读者可以快速高效地为他们的 Laravel 项目打下坚实的基础。

解决MySQL模式问题:TheliaMySQLModesChecker模块的使用体验 解决MySQL模式问题:TheliaMySQLModesChecker模块的使用体验 Apr 18, 2025 am 08:42 AM

在使用Thelia开发电商网站时,我遇到了一个棘手的问题:MySQL模式设置不当,导致某些功能无法正常运行。经过一番探索,我找到了一个名为TheliaMySQLModesChecker的模块,它能够自动修复Thelia所需的MySQL模式,彻底解决了我的困扰。

在MySQL中解释外键的目的。 在MySQL中解释外键的目的。 Apr 25, 2025 am 12:17 AM

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

比较和对比Mysql和Mariadb。 比较和对比Mysql和Mariadb。 Apr 26, 2025 am 12:08 AM

MySQL和MariaDB的主要区别在于性能、功能和许可证:1.MySQL由Oracle开发,MariaDB是其分支。2.MariaDB在高负载环境中性能可能更好。3.MariaDB提供了更多的存储引擎和功能。4.MySQL采用双重许可证,MariaDB完全开源。选择时应考虑现有基础设施、性能需求、功能需求和许可证成本。

See all articles