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

2025-06-26 17:50

本文主要是介绍mysql中的数据目录用法及说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《mysql中的数据目录用法及说明》:本文主要介绍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';
+---------------+------------------------------+
| Vawww.chinasem.cnriable_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-keChina编程y.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默认使用的是系统表空间EsDbG,也就是所有表数据和信息存储到一个公共的地方,对应着数据目录data下的ibdata1文件,这个文件大小和路径还有名称都是可以在配置文件修改的。

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

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

mysql> CREATEpython 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 tesChina编程t1.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、总结

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程China编程(www.chinasem.cn)。

这篇关于mysql中的数据目录用法及说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155226

相关文章

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has