当前位置: 首页 > article >正文

【MySQL】mysql数据目录

目录

  • 1、背景
  • 2、版本
  • 3、数据目录
  • 4、总结

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  115 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  115 10:57 ./
drwxr-xr-x 1 xxx 1049089      0  115 09:59 ../
-rw-r--r-- 1 xxx 1049089 147456  115 10:41 test1.ibd
-rw-r--r-- 1 xxx 1049089      0  115 10:57 test2.MYD
-rw-r--r-- 1 xxx 1049089   4096  115 10:57 test2.MYI
-rw-r--r-- 1 xxx 1049089   7733  115 10:57 test2_366.sdi

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

1、test2.MYD:存放数据信息
2、test2.MYI:存放索引信息
3、test2_366.sdi:存放表结构信息

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

4、总结

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


http://www.kler.cn/a/504964.html

相关文章:

  • Mysql--运维篇--备份和恢复(逻辑备份,mysqldump,物理备份,热备份,温备份,冷备份,二进制文件备份和恢复等)
  • mac 安装docker
  • 游戏市场成果及趋势
  • 抢十八游戏
  • 《机器学习》——贝叶斯算法
  • Anaconda安装(2024最新版)
  • 数据结构——概述
  • 论文略读:ASurvey of Large Language Models for Graphs
  • Redis 知识速览
  • Qiskit快速编程探索(进阶篇)
  • 计算机网络 (44)电子邮件
  • 北邮团队在Nature Medicine发表MedFound——辅助疾病诊断的通用医学语言模型|顶刊速递·25-01-15
  • npx和npm区别
  • 【Linux 36】多路转接 - epoll
  • 20250115面试鸭特训营第23天
  • C++并发编程之线程间数据划分的原则与方法
  • ASP.NET Core 中,认证(Authentication)和授权(Authorization)
  • opengauss数据库的日常运维操作
  • Android JecPack组件之LifeCycles 使用详解
  • 【开源宝藏】blade-tool AOP请求日志打印
  • 电脑玩游戏出现彩色斑点怎么回事,如何解决
  • 业务幂等性技术架构体系之消息幂等深入剖析
  • flutter 安卓端打包
  • Java 如何只测试某个类或方法:Maven与IntelliJ IDEA的不同方法及注意事项
  • iOS - TLS(线程本地存储)
  • 40,【5】CTFHUB WEB SQL 时间盲注