项目地址:https://github.com/ddcw/ibd2sql

 

从一堆 .ibd 文件中救回数据,我发现了这个宝藏项目:ibd2sql

在生产环境中丢过表结构或者误删数据的朋友,一定知道 .ibd 文件的“顽固”——明明数据还在文件里,但没有合适的工具,完全是“看得见却吃不到”的状态。

前几天我就遇到了类似的问题,服务器磁盘暴满,清理时手一抖删错了一个数据库,虽然保留了部分 .ibd 文件,但由于没有完整的表结构和 frm 文件,MySQL 根本无法识别这些文件。

我试了一些恢复工具,不是不能用,就是收费复杂或者只支持特定版本。后来在 GitHub 上翻到一个项目——ibd2sql,几乎完美解决了我的问题。用一句话来总结它:

ibd2sql = 纯 Python 实现的 MySQL .ibd 文件解析神器,可以直接把表数据解析成 SQL 插入语句,还原出丢失的结构和数据。


它能做什么?

✅ 直接读取 .ibd 文件,提取数据生成 SQL

只要你还留着 .ibd 文件,它就能直接从文件中读取数据页、提取出行记录,然后生成 INSERT INTO 的 SQL 语句,支持大部分常见数据类型,兼容 MySQL 5.x 到 8.x。

✅ 恢复被删除的记录(带删除标记)

它还能读取数据页中“标记为已删除”的记录(当然不能保证一定完整),对于紧急恢复误删数据,非常实用!

✅ 自动生成 CREATE TABLE 建表语句

如果你连表结构都丢了,它还能根据数据页中的元信息帮你还原大致的建表语句(虽然未必和原始完全一致,但结构基本正确)。

✅ 提供 Web 界面可视化查看

我还发现它带了一个 Web 模式的脚本(ibd2sql_web.py),可以直接通过浏览器上传 IBD 文件查看解析内容,非常适合非技术同事配合操作。


上手体验

安装几乎零门槛:

git clone https://github.com/ddcw/ibd2sql.git
cd ibd2sql
python3 main.py some_table.ibd --ddl --sql > restore.sql

三行命令,就可以拿到一份包含 CREATE TABLEINSERT 的完整恢复 SQL 文件。

如果你用浏览器看:

python3 ibd2sql_web.py your_table.ibd

访问 http://localhost:8080,就能图形化查看每条记录内容,体验非常棒!


一些意外的惊喜

  • 解析速度比我预期得快很多,尤其是新版支持了 super_fast_count 模式;
  • 支持非常多的数据类型,包括 GEOMETRYJSONDECIMALUCS2UTF16 等;
  • 连压缩页、密钥页(innodb_key_encrypt)都能识别,对 MySQL 8+ 支持得非常全面;
  • 项目更新很活跃,作者在 GitHub 上也经常回复 issue。

适合谁使用?

  • DBA 或后端开发在没有备份的情况下,尝试抢救 .ibd 文件中的数据;
  • 学习 InnoDB 存储格式的人,希望看看页结构、行记录;
  • 想实现自动化数据提取的工程场景(支持批量脚本处理);
  • 对数据恢复感兴趣的开发者、工具开发者。

总结一下

遇到数据误删、结构丢失等紧急情况时,ibd2sql 就像一个“数据黑匣子分析器”,从 .ibd 文件里剥开一层层结构,帮你尽可能还原出表和数据。

推荐指数:🌟🌟🌟🌟🌟
实用性:非常高
上手难度:低
稳定性:强

再次附上项目地址,推荐大家收藏一波:
👉 https://github.com/ddcw/ibd2sql

如果你也曾被 .ibd 折磨过,这个工具绝对值得你试一试。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注