InnoDB数据页结构之其它结构
前言回顾
我们知道InnoDB数据页的基本结构如下所示

在前期文章中我们聊了最小记录、最大记录、用户记录、页面目录的详细结构,往期文章参考
InnoDB数据页结构(1)环境搭建
InnoDB数据页结构(2)之记录头信息解析
InnoDB数据页结构(3)之记录头信息分析
InnoDB数据页结构(4)之页目录
至于剩下的几部分就相对简单了,下面简单了解即可。
Page Header(页面头部)
主要记录数据页的存储记录状态信息,如页目录中存储了多少个槽,当前数据页存储了多少条记录等等,固定占用56个字节,详细结构说明如下

File Header(文件头部)
上面的数据页头部是仅针对数据页而言,而文件头部则是对于所有的页通用,它描述了各数据页的一些通用信息如页编号、上一页页号和下一页页号等,这部分固定占用38个字节,具体结构如下所示

校验和
这里有个概念 校验和 ,什么叫做校验和呢?
在数据处理和数据通信领域中,用于校验目的地一组数据项的和,通常用来在通信中,尤其远距离通信中保证数据的正确性和完整性。
其实我们在日常中也有过简单使用,如md5校验和常常被用来作为验证传输文件是否完整的算法,简单使用如下
## 创建一个测试文件test.txt内容如下
hello world
## 采用linux自带命令md5sum生成md5值,并且追加到test.md5文件中
[root@root ~]# md5sum test.txt > test.md5
## test.md5文件内容如下
6f5902ac237024bdd0c176cb93063dc4 test.txt
## 检查test.txt是否被修改(没有修改时)
[root@root ~]# md5sum test.txt -c test.md5
md5sum: test.txt: no properly formatted MD5 checksum lines found
test.txt: OK
## 如果将test.txt内容修改再次检验
[root@root ~]# md5sum test.txt -c test.md5
md5sum: test.txt: no properly formatted MD5 checksum lines found
test.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
FIL_PAGE_PREV和FIL_PAGE_NEXT
我们知道一个数据页普遍的大小是16k,而我们的业务数据可能一个数据页放不下,那么就需要多个数据页存放,将这些可能不连续的数据页关联起来,这里就需要FIL_PAGE_PREV和FIL_PAGE_NEXT,上一页和下一页的页号,那么这就可以组成简单的双向链表,如下所示。

不过需要注意的是除数据页外其它页不一定存在这两个属性值。
File Trailer
因为InnoDB存储引擎是将数据以页为单位加载到内存中处理,如果内存中的数据修改了将会同步到磁盘中,但如果同步到一半遇到服务器停电、磁盘损坏等故障就会导致数据页不完整,为此新增了File Trailer部分其目的就是为了保证数据页的完整性。
File Trailer固定占用8个字节,这8个字节分为两个小部分
- 前四个字节:是和File Header的FIL_PAGE_SPACE_OR_CHKSUM值对应,每当一个页修改了那么在同步前就会得到该页的校验和会先赋值给FIL_PAGE_SPACE_OR_CHKSUM,因为File Header的校验和在前面部分,会先同步到磁盘,如果整个页同步正常,那么最后这两个的校验和将是一致的,反正则说明同步异常。
- 后四个字节:是和File Header的FIL_PAGE_LSN值对应,同样也是为了保证数据页的完整性。