乐趣区

关于mysql:InnoDB数据目录

前言

大家好,我是 xicheng。当初持续更新 MySQL,本篇讲 InnoDB 的数据目录。另外,InnoDB 的常识脑图如下所示,大家坐稳了。

数据目录构造

以 MySQL8.0 为例,不同版本可能会有出入。
通过 SHOW VARIABLES LIKE ‘datadir’ 查看数据目录。
InnoDB 和 MyISAM 这两种存储引擎,创立一个数据库时,会在数据目录下创立一个与数据库同名的文件夹。

InnoDB 表存储数据的形式

为了治理页,用了表空间或者文件空间概念,它能够对应文件系统上一个或多个实在文件。
每一个表空间能够被划分为很多个页。而表空间又被划分为几种不同的类型。详情请参考 MySQL 官网文档 Tablespaces。

零碎表空间(system tablespace)

InnoDB 会在数据目录下创立一个名为 ibdata1、大小为 12M 的文件,这个文件就是对应的零碎表空间在文件系统上的示意。在一个 MySQL 服务器中,零碎表空间只有一份。

独立表空间(file-per-table tablespace)

创立了多少个表,就有多少个独立表空间,用来存数据与索引。它在数据目录的库名文件夹下,叫 表名.ibd。

通用表空间(General tablespaces)

独立于 MySQL 的数据目录。不便迁徙数据,特地是空间不够的状况。

undo 表空间(Undo Tablespaces)

Undo 日志记录的汇合。

长期表空间(Temporary Tablespaces)

会话长期表空间:存储了用户创立的长期表和优化器创立的外部长期表。
全局长期表空间:存储对用户创立的长期表所做的更改的回滚段。

MyISAM 存储数据的形式

该存储引擎的数据和索引是离开寄存的。没有表空间。
在数据目录下的库名文件夹中,每个表会存在 2 文件,别离叫表名.MYD, 表名.MYI。
表名.MYD 存数据,表名.MYI 存索引。

其它文件与规定

数据目录下还存储了一些其它文件:服务器过程文件,服务器日志文件,密钥文件等。
为了防止数据库名和表名呈现某些特殊字符而造成文件系统不反对的状况,会把除数字和拉丁字母以外的所有字符在文件名里都映射成 @编码值的模式作为文件名。
例如 InnoDB 的表名为 ’test?’,对应的.ibd 文件成了 test@003f.ibd。

MySQL 零碎数据库简介

mysql

存储了账户和权限,存储过程,日志,时区信息等。

information_schema

存储了对于 MySQL 服务器所保护的所有其它数据库的信息。如数据库名,数据库的表,数据列数据类型与拜访权限等。

performance_schema

收集数据库服务器性能参数。并且该库里的表的存储引擎均为 PERFORMANCE_SCHEMA,而用户是不能创立存储引擎为 PERFORMANCE_SCHEMA 的表。

sys

通过视图的模式把 information_schema 和 performance_schema 联合起来,让程序员能够更不便的理解 MySQL 服务器的一些性能信息。

结尾

InnoDB 的数据目录就讲完了,心愿大家能继续学习。下一篇 MySQL 文章讲 InnoDB- 统计数据。微信扫描下方二维码,或搜寻“xicheng”,关注公众号后回复【笔记】,有我筹备的 15 万字 Java 面试笔记。

退出移动版