来源
MySQL的几个存储引擎如InnoDB和MyISAM都是将数据存储到磁盘上,而我们的操作系统是通过文件系统来管理磁盘的,所以可以说这几个存储引擎都是将表存储在文件系统上的,而我们通过操作文件系统来读写数据。
定义
数据目录存储MySQL服务器在运行过程重产生的数据,且在服务器程序启动时会从这个目录下加载一些文件。与安装目录不同,安装目录存储了许多控制服务器和客户端程序的命令。
结构
通过语句 SHOW VARIABLES LIKE 'datadir'; 可查看数据目录地址。
如下图为这个数据目录下的内容,information_schema比较特殊,没有使用相应的数据库目录
已知数据目录位置,我们创建的数据库就会在该文件夹下面生成一个同名子目录,并在这个子目录下创建一个名为db.opt的文件,这个文件包含该数据库的各种属性,如字符集/比较规则等
如下图为数据库tcc目录下的内容,它包含表结构的定义和表数据
不同的存储引擎存储表数据不同
-
InnoDB
-
页为基本单位管理存储空间
-
索引对应一颗B+树,B+树每个节点对应一个数据页
-
InnoDB提出表空间/文件空间的概念来对应文件系统上一个或多个真实文件,我们的表数据就存放在某个表空间下的某些页里
- 系统表空间:存储于数据目录下名为ibdata1,是个自扩展文件,可通过修改配置文件修改其位置大小;系统表空间在一个MySQL服务器中只有一份,MySQL5.5.7-5.6.6版本之间,表中数据默认存储到这个系统表空间
- 独立表空间:MySQL5.6.6版本之后InnoDB不会默认将表数据(数据+索引)存储到系统表空间而是单独为每一个表创建一个独立表空间,存储于每个数据库目录下以.ibd为扩展名;
- 可通过配置innodb_file_per_table=0孔子数据存储到系统表空间,1为存储到独立表空间,若想将原来的数据迁移到系统/独立表空间可使用语句ALTER TABLE 表名 TABLESPACE [=] innodb_system;系统表空间只存放一些系统数据,独立表空间只存放这个表的数据
- 其他类型的表空间.......
-
-
MyISAM
- MyISAM的索引全是二级索引,且数据和索引是分开存储的,所以使用不同的文件来存储数据文件和索引文件
- 没有表空间,表数据存储到对应的数据库子目录下,.MYD代表数据文件,.MYI代表索引文件
视图
MySQL中的视图其实是虚拟的表,所以存储视图不需要存储真实数据,只要存储其结构,以.frm文件存储到数据库对应的目录下;8.0版本之后就没有.frm文件了
其他文件
数据目录下还存放一些其他的文件以更好的运行程序
- 服务器进程文件
- 服务器日志文件
- 默认/自动生成的SSL和RSA证书和密钥文件
InnoDB的表空间
- 独立表空间结构
- 系统表空间结构
表空间被划分为许多连续的区
extent,每个区默认由64个页组成,每256个区划分为一组,每个组的最开始的几个页面类型是固定的。