从一堆 .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 TABLE 和 INSERT 的完整恢复 SQL 文件。
如果你用浏览器看:
python3 ibd2sql_web.py your_table.ibd
访问 http://localhost:8080,就能图形化查看每条记录内容,体验非常棒!
一些意外的惊喜
- 解析速度比我预期得快很多,尤其是新版支持了
super_fast_count模式; - 支持非常多的数据类型,包括
GEOMETRY、JSON、DECIMAL、UCS2、UTF16等; - 连压缩页、密钥页(innodb_key_encrypt)都能识别,对 MySQL 8+ 支持得非常全面;
- 项目更新很活跃,作者在 GitHub 上也经常回复 issue。
适合谁使用?
- DBA 或后端开发在没有备份的情况下,尝试抢救
.ibd文件中的数据; - 学习 InnoDB 存储格式的人,希望看看页结构、行记录;
- 想实现自动化数据提取的工程场景(支持批量脚本处理);
- 对数据恢复感兴趣的开发者、工具开发者。
总结一下
遇到数据误删、结构丢失等紧急情况时,ibd2sql 就像一个“数据黑匣子分析器”,从 .ibd 文件里剥开一层层结构,帮你尽可能还原出表和数据。
推荐指数:🌟🌟🌟🌟🌟
实用性:非常高
上手难度:低
稳定性:强
再次附上项目地址,推荐大家收藏一波:
👉 https://github.com/ddcw/ibd2sql
如果你也曾被 .ibd 折磨过,这个工具绝对值得你试一试。
