0

0

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

WBOY

WBOY

发布时间:2023-01-24 06:30:01

|

1957人浏览过

|

来源于CSDN

转载

本篇文章给大家带来了关于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 配置

佳可购物 2005
佳可购物 2005

在上版本的基础上修改了商品显示的形式,修改了后台的部门功能BUG,数据库结构做了一定的调整,优化了页面的美观,补了上传组件的漏洞,增加了首页滚动新闻图片功能,将三级目录改为二级目录前台用户名:jok35密码:2后台用户名及密码均为:admin

下载

文件:

② 独立表空间(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修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

665

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

247

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

515

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

255

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

531

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

600

2023.08.14

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

6

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 805人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号