前言
大家好,我是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 面试笔记。