为了帮助理解mysql的数据文件在磁盘上的格式, 之前整了个解析ibd文件的工具, 但效果不太好--即使有DEBUG之类的功能,依旧不好理解. 于是就想着来个图形化的, tkinter就不错, 但这软件通常是运行在字符终端的, 而且服务端基本上都没得图形化的, 那就只能选择浏览器了. 于是就整了个可以在浏览器上查看mysql数据文件的工具.
为了使用方便,就没使用第三方插件(比如bootstrap之类的好看点的组件)
配色比较丑, 见谅
win和linux使用是完全一样的(py3的功劳),
wget https://github.com/ddcw/ibd2sql/archive/refs/heads/main.zip
unzip main.zip
cd ibd2sql-main
python3 ibd2sql_web.py /data/mysql_3314/mysqldata/db1/t.ibd然后就可以在浏览器上查看了. 默认是监听的0.0.0.0, 即可以使用任意端口访问, 若有特殊需求要更改监听地址或者端口的, 直接编辑脚本即可

不多扯了, 直接看效果吧
终端只是个简单的提示

浏览器上显示效果如下:

左边是索引, 支持查看所有索引的结构(mysql的数据文件就是一堆索引). 点击任意索引即可,默认是主键.
比如当前显示的就是主键的ROOT PAGE(页ID为:4, 有186条数据,即有186个二层节点). 没得上一页和下一页.
点击当前页可以查看详细信息, 比如

我们可以看到page_level为2, 即代表有2层; root page比较特殊, 还有seg_leaf和seg_top之类的信息.
然后我们点击任意节点 即可进入该节点. 比如我们点击id=270239的节点

然后我们就可以看到如下信息:

当然也可以点击<当前页>来查看基础信息,

比如我们看到,这一页有1120个字段, page_level是1, 表示还有1层. seg_leaf之类的就没得了. 前一页是70, 下一页是72, 这是逻辑顺序(由于我们是连续插入的数据,所以大概率是也是连着的).
既然还有一层, 那我们再随便点击一个node, 即可进入下一层. (感觉可以做成游戏..)
就选择id=27188的node吧

然后我们就进来了, 可以看到如下信息:

老规矩, 先点<当前页>查看详情

发现page_level=0,表示这是叶子节点了. 如果是主键的话, 叶子节点是记录完整数据的. 二级索引的话,是记录的主键的值(回表).
为了展示美观, 默认只展示key的值, 要详情的话, 点击任一节点即可. 比如我们点击id=271689的

可以看到 主键是271689, 剩下2个字段(field)也是271689 (造数据的时候方便..)

当前我们的DDL功能也是保留的, 点击左边的DDL也是可以查看的

刚才演示的是主键索引, 二级索引也是完全一样的.只不过是field换成了主键信息

这里的前后页就是btr+的链表关系. 每一层(除了root page)的node之间都是这样链接起来的, 主要是为了方便查找,不然还得返回父节点去... (DIR_SLOTS之类的都是为了方便查找的)
虽然界面不好看, 但还是很好理解的. 有什么需求或者建议可以留言或者提issue.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。