存储引擎文件
之前的文件都是MySQL数据库本身文件,和存储引擎无关。除了这些文件,每个表存储引擎还有自己独有的文件。包括重做日志文件、表空间文件。
表空间文件
InnoDB采用将存储的数据
按表空间(tablespace)
进行存放
的设计。
在默认配置
下会有一个初始大小为10MB
,名为ibdata1
的文件。该文件就是默认的表空间文件(tablespace file)
,用户可以通过参数innodb_data_file_path
对其进行设置。用户可以通过多个文件组成一个表空间,同时制定文件的属性。该文件可以自动增长(autoextend)
。设置innodb_data_file_path参数后,所有基于InnoDB存储引擎的表的数据都会记录到该共享表空间
中。
若设置了参数innodb_file_per_table
,则用户可以将每个
基于InnoDB存储引擎的表
产生一个独立表空间。独立表空间
的命名规则为:表名.ibd
。通过这样的方式,用户不用将所有数据都存放于默认的表空间中。
注意
这些单独表空间仅存储该表的数据
、索引
和插入缓冲BITMAP
等信息,其余信息还是存放在默认的表空间
中。
重做日志文件
在默认情况下,在InnoDB存储引擎的数据目录下会有两个名为ib_logfile0和ib_logfile1的文件。在MySQL官方手册中将其称为InnoDB存储引擎的日志文件,不过更准确的定义应该是重做日志文件(redo log file)。为什么强调是重做日志文件呢?因为重做日志文件对于InnoDB存储引擎至关重要,它们记录了对于InnoDB存储引擎的事务日志。
每个InnoDB存储引擎至少
有1个
重做日志文件组(group)
,每个文件组下至少
有2个
重做日志文件
,如默认的ib_logfile0和ib_logfile1。
为了得到更高的可靠性,用户可以设置多个的镜像日志组(mirrored log groups),将不同的文件组放在不同的磁盘上,以此提高重做日志的高可用性。
在日志组
中每个重做日志文件的大小一致
,并以循环写入
的方式运行。InnoDB存储引擎先写
重做日志文件1,当达到文件的最后时,会切换
至重做日志文件2,再当重做日志文件2也被写满时,会再切换
到重做日志文件1中。