在MySQL建立表后,会在对应的库文件夹下创建2个文件。
一个是frm,一个是ibd,目前这个博文为简单分析下这个文件格式。
这里首先要知道一些预备知识:
查看InnoDB块的大小,一般是16k
show vaiables like '%page%'
从中可以看到innodb_page_size为16384字节。
使用ibd除以这个字节大小,就可以知道这个文件有多少块了!
如:
98304/16384可知,这个gyj_t3.ibd有6个page
其中此库对应的数据为:
看下官方给的文件结图:
第一块为:File Space Header
第二块为:Insert Buffer Bitmap
第三块为:File Segment inode
从第四块开始就是存数据的了,把对应的ibd文件放到windows下,打开看看。直接来看看第四块,数据块,头标识为0x45B
来搜索下:
先来验证下这个是不是第三块的末尾:
C018h,对应的十进制为49176
第一块的位置:
为0018h对应的十进制为24。
这个前面的字符为文件头,用于标识这个是什么格式的文件,等信息。
下面来算算这个是不是第三块结束,的位置:(49176 - 24) / 16384 = 3刚刚好。
这个就是数据位了!
看下对应的数据文件:
从中可以看到,在MySQL数据段中,NULL以及’’不占空间。
int长度是4字节,其他可变长name长度是10字节,用多少长多少。
第二行数据ID:80 00 00 03,下一行在80 00 00 04