前言
大家好,我是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-统计数据。
感谢各位人才的点赞、收藏和评论,干货文章持续更新中,下篇文章再见!