mysql的数据存在linux的哪个目录——数据目录(有图有真相)

2024-01-12 10:59

本文主要是介绍mysql的数据存在linux的哪个目录——数据目录(有图有真相),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

mysql的存储引擎都是把表存储在磁盘上,而操作系统用文件系统管理磁盘。所以总而言之,存储引擎把表存储在文件系统上。

下面说下数据是如何在文件系统中存储的。

mysql服务器程序在启动时会到文件系统的某个目录下加载一些文件,在运行过程中也会把产生的数据存储到这个目录下的某些文件。

        捋关系:操作系统用文件系统管理磁盘,mysql产生的数据存到文件系统的某个目录下的某个文件,而启动mysql的某些文件也存在这个目录下,这个目录就叫数据目录。

数据目录和安装目录的区别:

        安装目录下有个重要的bin目录,它存储了许多控制客户端程序和服务器程序的命令(mysql,mysqld,mysqld_safe等等好几十个命令)。

        而数据目录是用来存储mysql运行过程中产生的数据。两个不是一回事,一定要区分开,不是一个目录。

查看数据目录sql语句:

        sql> show variables like 'datadir';

数据目录结构:

        当我们create database 数据库名语句创建一个数据库的时候,在文件系统的数据目录下实际发生了什么?

        每个数据库都对应数据目录下的一个子目录,或者说一个文件夹,每当创建一个数据库时,mysql会干两件事:

        1)在数据目录下创建一个同数据库名的文件夹

        2)在此文件夹下创建一个名为db.opt的文件,这个文件中包含该数据库的各种属性,比如数据库的字符集和比较规则等等。

表在文件系统中的表示:

        我们的数据其实都是以记录的形式插入到表中的,每个表的信息其实可以分为两种:

                1)表结构的定义

                        表结构就是该表的名称,表里有多少列,每个列的数据类型,约束条件和索引,字符集和比较规则。这些信息都体现在建表的语句中。

                        为了保存表结构的信息,InnoDB和MyISAM都在数据目录下对应的数据库文件夹下创建了一个专门用于描述表结构的文件:表名.frm

                2)表中的数据

                        对于存储数据的文件不同存储引擎产生不通的文件。InnoDB、MyISAM在创建表时产生不同的文件-CSDN博客

                       下面换行继续聊。

InnoDB中如何存储表数据:

        InnoDB设计这提出个概念:表空间

        表空间是一个抽象的概念,它可以对应文件系统上一个或者多个真实文件。每个表空间可以被划分为很多页,我们的表数据就是存放在某个表空间下的某个页里。表空间划分为不同的类型。

        系统表空间:

        这个所谓的系统表空间可以对应文件系统上一个或者多个实际文件,默认情况下,InnDB会在数据目录下创建一个名为ibdata1。这个文件就是系统表空间在文件系统上的表示。并且是子扩展文件,会自己增加文件大小。

        独立表空间:

        InnoDB不会默认把各个表的数据存储到系统表空间中,而是为每个表建立一个独立表空间,创建多少个表,就有多少独立表空间。使用独立表空间来存储表数据的话,会在数据库文件夹中创建一个独立表空间的文件,文件名和表明相同,后缀.ibd

        我们可以指定使用系统表空间还是独立表空间来存储数据,默认存储独立表空间。

        其他类型表空间:

        undo表空间,临时表空间,后面的文章再介绍。

MyISAM中如何存储表数据:

        和InnoDB中不同的是,MyISAM没有表空间一说,表数据都存储在对应的数据库子目录下。假设test表使用MyISAM存储引擎的话,在所在数据库文件夹下会为test表创建三个文件:

        test.frm       test.myd数据文件      test.myi索引文件

mysql的几个系统数据库介绍:

        mysql:

                这个数据库很核心,存储了mysql的用户账户和权限信息,⼀些存储过程、事件的定义信息,⼀些运行过程中产生的日志信息,一些帮助信息以及时区信息等。

        information_schema:

                这个数据库保存着MySQL服务器维护的所有其他数据库的信息,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引。这些信息并不是真实的用户数据,而是⼀些描述性信息,有时候也称之为元数据。

        performance_schema:

                这个数据库里主要保存MySQL服务器运行过程中的⼀些状态信息,算是对MySQL服务器的⼀个性能监控。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等等信息。
        sys:

                这个数据库主要是通过视图的形式把information_schema和performance_schema结合起来,让程序员可以更方便的了解MySQL服务器的⼀些性能信息。

        

这篇关于mysql的数据存在linux的哪个目录——数据目录(有图有真相)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

随想录 Day 69 并查集 107. 寻找存在的路径

随想录 Day 69 并查集 107. 寻找存在的路径 理论基础 int n = 1005; // n根据题目中节点数量而定,一般比节点数量大一点就好vector<int> father = vector<int> (n, 0); // C++里的一种数组结构// 并查集初始化void init() {for (int i = 0; i < n; ++i) {father[i] = i;}

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

mysql索引四(组合索引)

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引,即一个索引包含多个列。 因为有事,下面内容全部转自:https://www.cnblogs.com/farmer-cabbage/p/5793589.html 为了形象地对比单列索引和组合索引,为表添加多个字段:    CREATE TABLE mytable( ID INT NOT NULL, use

mysql索引三(全文索引)

前面分别介绍了mysql索引一(普通索引)、mysql索引二(唯一索引)。 本文学习mysql全文索引。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。 在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(

mysql索引二(唯一索引)

前文中介绍了MySQL中普通索引用法,和没有索引的区别。mysql索引一(普通索引) 下面学习一下唯一索引。 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引。 添加数据库唯一索引的几种

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)