欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

[MySQL]InnoDB文件介绍_MySQL

程序员文章站 2022-06-15 20:33:55
...
bitsCN.com

[MySQL]InnoDB文件介绍

MySQL一个显著的特点是其可插拔的存储引擎,因此MySQL文件分为两种,一种是和MySQL数据库本身相关的文件,一种是和存储引擎相关的文件。本文主要介绍和InnoDB存储引擎相关的文件。

表空间文件

InnoDB在存储上也模仿了Oracle的设计,数据按表空间进行存储,但是和Oracle不一样的是,Oracle的表空间是个逻辑的概念,而InnoDB的表空间是个物理的概念。

你可以通过参数innodb_data_file_path来设置默认的表空间文件,所有基于InnoDB存储引擎的表都会存储在该文件内。如果你想基于每个表单独生成一个表空间文件,可以设置参数innodb_file_per_table为ON,这样表的数据、索引和插入缓冲等消息存储在单独的表空间文件中,但其余信息还是存储在默认的表空间文件中。

下图显示了表空间文件的存储方式:

[MySQL]InnoDB文件介绍_MySQL

上图中主要有以下几种存储文件:

1)表结构定义文件(.frm):MySQL里每个表和每个视图都有一个对应的.frm文件用于记录表和视图的定义。注意:该文件和存储引擎无关,属于MySQL数据库本身的文件。

2)默认表空间文件(ibdata)

3)单独表空间文件(.ibd)

重做日志文件

重做日志文件对InnoDB存储引擎至关重要,记录了事务日志,如果数据库由于宕机导致实例失败,重新启动时,就可以利用重做日志恢复到宕机前的一致性状态。

MySQL的重做日志和Oracle的很类似,通过循环的方式覆盖重用,下图显示了一个拥有3个重做日志文件的重做日志文件组:

[MySQL]InnoDB文件介绍_MySQL

这里有个疑问,同样是记录事务日志,InnoDB的重做日志文件和MySQL自身的二进制文件有什么区别?它们的区别主要有以下三点:

1)首先,范围不同。二进制文件记录所有与MySQL相关的日志记录,包括InnoDB,MyISAM,Heap等存储引擎的日志。而InnoDB的重做日志只记录InnoDB相关的事务日志。

2)其次,内容不同。二进制文件记录的是关于一个事务的具体操作内容,而InnoDB的重做日志记录每个数据页(page)更改的物理情况。

3)写入的时间不同。二进制文件在事务提交之前记录,在事务进行过程中,不断有重做日志条目写入重做日志文件中。

bitsCN.com
相关标签: 数据库 空间