mysql中的数据目录用法及说明

 更新时间:2025年06月26日 15:57:37   作者:在成都搬砖的鸭鸭  
这篇文章主要介绍了mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1、背景

安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的数据都是存储在这个目录中,可以大概了解一下这个目录下是怎么存储数据的。

2、版本

mysql> status
--------------
E:\mysql_install\mysql\bin\mysql.exe  Ver 8.0.40 for Win64 on x86_64 (MySQL Community Server - GPL)

3、数据目录

可以通过sql命令来查找数据目录,命令如下:

mysql> show variables like 'datadir';
+---------------+------------------------------+
| Variable_name | Value                        |
+---------------+------------------------------+
| datadir       | E:\mysql_install\mysql\Data\ |
+---------------+------------------------------+
1 row in set, 1 warning (0.00 sec)

再看看这个目录有哪些文件:

$ ls E:\\mysql_install\\mysql\\Data\\
'#ib_16384_0.dblwr'   A030414-NC.err          A030414-NC-bin.000003   ca.pem            ib_buffer_pool   mysql.ibd             server-cert.pem   undo_001
'#ib_16384_1.dblwr'   A030414-NC.pid          A030414-NC-bin.index    ca-key.pem        ibdata1          performance_schema/   server-key.pem    undo_002
'#innodb_redo'/       A030414-NC-bin.000001   A030414-NC-slow.log     client-cert.pem   ibtmp1           private_key.pem       sys/
'#innodb_temp'/       A030414-NC-bin.000002   auto.cnf                client-key.pem    mysql/           public_key.pem        

看一下有哪些数据库:

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

查询结果有4个可以发现除了data目录下除了没有名为information_schema的目录,其它三个数据库都存在同名的目录,其它三个数据库的数据就存在对应的同名目录里,只是information_schema比较特殊。

接下来我们创建一个新的数据库:

mysql> create database test;

然后可以发现data目录下多了一个test的空目录,里面啥也没有,每创建一个数据库,data目录下就会多一个同名的目录:

$ ll E:\\mysql_install\\mysql\\Data\\test
total 0

再创建一张InnoDB的表看看:

mysql> use test;
Database changed
mysql> CREATE TABLE test1
    -> (
    ->     id INT AUTO_INCREMENT PRIMARY KEY,
    ->     str1 VARCHAR(255) NOT NULL DEFAULT '',
    ->     str2 VARCHAR(255),
    ->     str3 CHAR(5),
    ->     str4 VARCHAR(255),
    ->     str5 CHAR(10),
    ->     INDEX idx_str1 (str1),
    ->     INDEX idx_str4_str5 (str4, str5)
    -> ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
Query OK, 0 rows affected (0.05 sec)

可以发现test目录下产生了一个test1.ibd的二进制文件:

$ ll E:\\mysql_install\\mysql\\Data\\test\\
total 192
-rw-r--r-- 1 xxx 1049089 147456  1月 15 10:11 test1.ibd

我们的表结构信息和插入此表的数据都存在这个文件中,这个文件也可以叫做独立表空间,里面存储多个,我们的数据都在页上。

以前版本的mysql默认使用的是系统表空间,也就是所有表数据和信息存储到一个公共的地方,对应着数据目录data下的ibdata1文件,这个文件大小和路径还有名称都是可以在配置文件修改的。

有的版本还会把表结构信息单独存储到表名.frm里,和存储数据文件分开。

接下来再创建一个MyISAM存储引擎的表来看看有什么区别:

mysql> CREATE TABLE test2
    -> (
    ->     id INT AUTO_INCREMENT PRIMARY KEY,
    ->     str1 VARCHAR(255) NOT NULL DEFAULT '',
    ->     str2 VARCHAR(255),
    ->     str3 CHAR(5),
    ->     str4 VARCHAR(255),
    ->     str5 CHAR(10),
    ->     INDEX idx_str1 (str1),
    ->     INDEX idx_str4_str5 (str4, str5)
    -> ) ENGINE = MyISAM DEFAULT CHARSET = utf8;
Query OK, 0 rows affected, 1 warning (0.02 sec)

查看data目录下test目录下有哪些文件:

$ ll -a E:\\mysql_install\\mysql\\Data\\test\\
total 212
drwxr-xr-x 1 xxx 1049089      0  1月 15 10:57 ./
drwxr-xr-x 1 xxx 1049089      0  1月 15 09:59 ../
-rw-r--r-- 1 xxx 1049089 147456  1月 15 10:41 test1.ibd
-rw-r--r-- 1 xxx 1049089      0  1月 15 10:57 test2.MYD
-rw-r--r-- 1 xxx 1049089   4096  1月 15 10:57 test2.MYI
-rw-r--r-- 1 xxx 1049089   7733  1月 15 10:57 test2_366.sdi

发现生成了与test2相关的3个文件,这3个文件的作用分别为:

  • test2.MYD:存放数据信息
  • test2.MYI:存放索引信息
  • test2_366.sdi:存放表结构信息

有的版本表结构信息是存储在表名.frm文件中。

4、总结

本文大概讲了一下我们插入数据库的用户记录是存储在哪些目录哪些文件里的,注意不同版本的数据库存储的文件是有区别的,不过都大差不差,了解一下就行。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 彻底删除MySQL步骤介绍

    彻底删除MySQL步骤介绍

    大家好,本篇文章主要讲的是彻底删除MySQL步骤介绍,感兴趣的赶紧来看看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • MySQL索引类型Normal、Unique和Full Text的讲解

    MySQL索引类型Normal、Unique和Full Text的讲解

    今天小编就为大家分享一篇关于MySQL索引类型Normal、Unique和Full Text的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 详解MySQL中SlowLog的配置方法(图文)

    详解MySQL中SlowLog的配置方法(图文)

    mysql 日志系统上线有段时间了,前端在慢慢切站点过来写入,未雨绸缪 diy了套 mysql 监控工具
    2014-02-02
  • mysql存储过程原理与用法详解

    mysql存储过程原理与用法详解

    这篇文章主要介绍了mysql存储过程,结合图文与实例形式较为详细的分析了mysql存储过程基本概念、原理、用法及相关操作注意事项,需要的朋友可以参考下
    2020-04-04
  • Centos7.5安装mysql5.7.24二进制包方式部署

    Centos7.5安装mysql5.7.24二进制包方式部署

    这篇文章主要介绍了Centos7.5安装mysql5.7.24二进制包方式部署,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • mysql时间相减如何获取秒值

    mysql时间相减如何获取秒值

    这篇文章主要介绍了mysql时间相减如何获取秒值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • MySQL查询字段为NULL、不为NULL的数据问题

    MySQL查询字段为NULL、不为NULL的数据问题

    介绍了MySQL查询字段为NULL和不为NULL的数据时需要注意的几点,包括查询语句的编写和NULL与其他字符的操作,通过实际操作对比,指出使用IS NOT NULL可以正确查询到非NULL字段的数据
    2025-02-02
  • 与MSSQL对比学习MYSQL的心得(八)--插入 更新 删除

    与MSSQL对比学习MYSQL的心得(八)--插入 更新 删除

    这一篇《与MSSQL对比学习MYSQL的心得(八)》将会讲解MYSQL的插入、更新和删除语句
    2014-08-08
  • mysql下怎样运行脚本以运行niuzi.sql为例

    mysql下怎样运行脚本以运行niuzi.sql为例

    mysql下运行脚本,有两种方法,都是在命令行下进行的,需要的朋友可以记录下
    2014-07-07
  • MySQL一些常用高级SQL语句详解

    MySQL一些常用高级SQL语句详解

    对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。例如只取 10 条数据、对查询结果进行排序或分组等等,今天就给大家分享MySQL一些常用高级SQL语句,感兴趣的朋友一起看看吧
    2022-06-06

最新评论