MySQL笔记-ibd文件格式初步分析(仅数据块笔记)

在MySQL建立表后,会在对应的库文件夹下创建2个文件。

一个是frm,一个是ibd,目前这个博文为简单分析下这个文件格式。

 

这里首先要知道一些预备知识:

查看InnoDB块的大小,一般是16k

show vaiables like '%page%'

MySQL笔记-ibd文件格式初步分析(仅数据块笔记)

从中可以看到innodb_page_size为16384字节。

使用ibd除以这个字节大小,就可以知道这个文件有多少块了!

如:

MySQL笔记-ibd文件格式初步分析(仅数据块笔记)

98304/16384可知,这个gyj_t3.ibd有6个page

MySQL笔记-ibd文件格式初步分析(仅数据块笔记)

其中此库对应的数据为:

MySQL笔记-ibd文件格式初步分析(仅数据块笔记)

看下官方给的文件结图:

MySQL笔记-ibd文件格式初步分析(仅数据块笔记)

第一块为:File Space Header

第二块为:Insert Buffer Bitmap

第三块为:File Segment inode

从第四块开始就是存数据的了,把对应的ibd文件放到windows下,打开看看。直接来看看第四块,数据块,头标识为0x45B

来搜索下:

MySQL笔记-ibd文件格式初步分析(仅数据块笔记)

先来验证下这个是不是第三块的末尾:

C018h,对应的十进制为49176

第一块的位置:

MySQL笔记-ibd文件格式初步分析(仅数据块笔记)

为0018h对应的十进制为24。

这个前面的字符为文件头,用于标识这个是什么格式的文件,等信息。

 

下面来算算这个是不是第三块结束,的位置:(49176 - 24) / 16384 = 3刚刚好。

这个就是数据位了!

看下对应的数据文件:

MySQL笔记-ibd文件格式初步分析(仅数据块笔记)

从中可以看到,在MySQL数据段中,NULL以及’’不占空间。

int长度是4字节,其他可变长name长度是10字节,用多少长多少。

第二行数据ID:80 00 00 03,下一行在80 00 00 04

MySQL笔记-ibd文件格式初步分析(仅数据块笔记)

 

 

上一篇:碎片或不碎片? GAE / JAVA / JDO


下一篇:Mysql 创建外部表