MySQL数据恢复工具:ibd2sql离线解析.ibd文件转换为SQL

 更新时间:2025年06月21日 15:25:50   作者:学亮编程手记  
ibd2sql是纯Python3工具,用于离线解析MySQL InnoDB IBD文件生成SQL语句,支持多版本和复杂结构,可恢复误删数据,优点包括无依赖、灵活输出,但存在性能慢、数据完整性风险及资源消耗大的缺点,适用于数据恢复、迁移和审计场景

ibd2sql工具可能是您的救命稻草。这是一款能将离线ibd文件转换为SQL语句的神器,可以帮助恢复宝贵的数据。

ibd2sql 是一个使用纯 Python 3 编写的工具,用于离线解析 MySQL InnoDB 存储引擎的 IBD 文件,并将其转换为 SQL 语句。该工具无需任何第三方依赖包,使用 GPL-3.0 许可证发布。

ibd2sql优点

  1. 方便: 提取表的 DDL(数据定义语言)。
  2. 实用: 支持替换库名(–schema)和表名(–table),可以在 SQL 语句中输出完整的字段(–complete)。
  3. 简单: 纯 Python 3 代码编写,无依赖包。
  4. 支持众多数据类型: 支持所有 MySQL 数据类型。
  5. 支持复杂的表结构: 支持分区表、注释、主键、外键、约束、自增、普通索引、前缀索引、主键前缀索引、唯一索引、复合索引、默认值、符号、虚拟字段、INSTANT、无主键等情况的表。
  6. 数据误删恢复: 可以输出被标记为已删除的数据。
  7. 安全: 离线解析 IBD 文件,仅需读取权限。
  8. IBD文件强制解析:IBD文件如果损坏,可以恢复部分数据。
  9. 支持范围广: 支持 MySQL 5.6、5.7、8.0、8.4、9.0。

ibd2sql缺点

  1. 性能: 对于大型表,解析和生成 SQL 语句的过程可能较慢。
  2. 数据完整性: 如果 IBD 文件本身已经严重损坏,恢复的数据可能不完整。
  3. 资源消耗: 生成的 SQL 文件可能较大,需要足够的磁盘空间和内存。

ibd2sql参数说明

--version, -v, -V: 显示版本信息。
--ddl, -d: 打印 DDL。
--sql: 打印数据的 SQL 语句。
--delete: 仅打印被标记为已删除的数据。
--complete-insert: 使用完整的插入语句。
--force, -f: 在遇到错误页面时强制解析文件。
--set: 用实际数据填充 set/enum 而不是字符串。
--multi-value: 如果数据属于同一页面,则使用单个 SQL 语句。
--replace: 使用 "REPLACE INTO" 替换 "INSERT INTO"(默认)。
--table TABLE_NAME: 替换表名(不包括 DDL)。
--schema SCHEMA_NAME: 替换库名(不包括 DDL)。
--sdi-table SDI_TABLE: 从这个 IBD 文件(分区表)读取 SDI 页面。
--where-trx WHERE_TRX: 事务过滤范围,默认 (0,281474976710656)。
--where-rollptr WHERE_ROLLPTR: 回滚指针过滤范围,默认 (0,72057594037927936)。
--limit LIMIT: 限制行数。
--debug, -D: 调试模式(输出非常大)。
--debug-file DEBUG_FILE: 调试输出文件,默认为 sys.stdout。
--page-min PAGE_MIN: 如果页面编号小于此值,则终止。
--page-max PAGE_MAX: 如果页面编号大于此值,则终止。
--page-start PAGE_START: 索引页面起始编号。
--page-count PAGE_COUNT: 页面计数编号。
--page-skip PAGE_SKIP: 解析索引页面时跳过某些页面。
--mysql5: 适用于 MySQL 5.7 标志。

环境依赖python3

tar xvf Python-3.6.1.tgz
cd Python-3.6.1
mkdir -p /usr/local/python3
./configure --prefix=/usr/local/python3
make && make install
ln -s /usr/local/python3/bin/python3 /usr/bin/python3

安装ibd2sql

[root@idc opt]# wget https://github.com/ddcw/ibd2sql/archive/refs/heads/main.zip[root@idc opt]# unzip main.zip[root@idc opt]# cd ibd2sql-main

解析ibd文件

[root@idc ibd2sql-main]# cp /jesong/mysql/qaqdb/inner_announcement.ibd  /opt/ibd2sql-main/

[root@idc-mongo55 ibd2sql-main]# python3 main.py ./inner_announcement.ibd --sql --ddl

使用示例

##仅打印被标记为已删除的数据
python3 main.py /jesong/mysql/qaqdb/el_inner_announcement.ibd --sql --ddl --delete
##使用完整的插入语句
python3 main.py /jesong/mysql/qaqdb/el_inner_announcement.ibd --sql --ddl --delete --complete-insert
##在遇到错误页面时强制解析文件
python3 main.py /jesong/mysql/qaqdb/el_inner_announcement.ibd --sql --ddl --force
##替换表名
python3 main.py /jesong/mysql/qaqdb/el_inner_announcement.ibd --sql --ddl --complete-insert --table xxbox
##数据属于同一页面,则使用单个 SQL 语句(合并insert)
python3 main.py /jesong/mysql/qaqdb/el_inner_announcement.ibd --sql --ddl --complete-insert --table xxbox --multi-value

总结

ibd2sql 是一个强大的工具,适用于多种 MySQL 数据管理和恢复场景。它的无依赖包、广泛支持的 MySQL 版本和灵活的输出选项使其成为处理 IBD 文件的有力工具。然而,对于大型表和严重损坏的 IBD 文件,使用时需要注意性能和数据完整性问题。总体来说,ibd2sql 是一个值得推荐的工具,特别适合数据恢复、迁移和审计等任务。

到此这篇关于MySQL数据恢复工具:ibd2sql离线解析.ibd文件转换为SQL的文章就介绍到这了,更多相关MySQL数据恢复工具ibd2sql解析.ibd文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL如何恢复单库或单表,以及可能遇到的坑

    MySQL如何恢复单库或单表,以及可能遇到的坑

    这篇文章主要介绍了MySQL如何恢复单库或单表,以及可能遇到的坑,帮助大家更好的备份数据库,保护数据安全,感兴趣的朋友可以了解下
    2020-09-09
  • MySQL触发器的使用

    MySQL触发器的使用

    触发器用于在 MySQL 执行插入、更新或删除语句时,自动触发执行其他SQL代码。本文讲解触发器的正确使用方式
    2021-05-05
  • 新建一个MySQL数据库的简单教程

    新建一个MySQL数据库的简单教程

    这篇文章主要介绍了新建一个MySQL数据库的简单教程,是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • idea连接mysql数据库失败的几种解决方案

    idea连接mysql数据库失败的几种解决方案

    我们在学习Mybatis时需要连接Mysql数据库,使用IDEA无法连接mysql数据库,下面这篇文章主要给大家介绍了关于idea连接mysql数据库失败的几种解决方案,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • 详解MySQL拼接函数CONCAT的使用心得

    详解MySQL拼接函数CONCAT的使用心得

    这篇文章主要介绍了详解MySQL拼接函数CONCAT的使用心得,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • MySQL之存储引擎使用及说明

    MySQL之存储引擎使用及说明

    这篇文章主要介绍了MySQL之存储引擎使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • MySql修改数据库编码为UTF8避免造成乱码问题

    MySql修改数据库编码为UTF8避免造成乱码问题

    mysql 创建数据库时指定编码很重要,很多开发者都使用了默认编码,乱码问题可是防不胜防,下面与大家分享下通过修改数据库默认编码方式为UTF8来减少数据库创建时的设置,避免因粗心造成的乱码问题
    2013-06-06
  • sql中with as用法以及with-as性能调优/with用法举例

    sql中with as用法以及with-as性能调优/with用法举例

    SQL中的WITH AS语法是一种强大的工具,可以简化复杂查询的编写,提高查询的可读性和维护性,这篇文章主要给大家介绍了关于sql中with as用法以及with-as性能调优/with用法的相关资料,需要的朋友可以参考下
    2024-01-01
  • 使用JS+HTML/CSS实现虚拟滚动和分页加载效果

    使用JS+HTML/CSS实现虚拟滚动和分页加载效果

    虚拟滚动和分页加载是一种优化大型数据集的常见技术,用于在Web应用程序中提高性能和用户体验,在本文中,我将演示如何使用JavaScript和HTML/CSS来实现虚拟滚动和分页加载,同时提供示例代码和详细解释,需要的朋友可以参考下
    2023-10-10
  • MySQL优化之对RAND()的优化方法

    MySQL优化之对RAND()的优化方法

    这篇文章主要介绍了MySQL优化之对RAND()的优化方法,本文详细分析了Mysql中对RAND()的几种优化方法,并最终得出一个结论,需要的朋友可以参考下
    2014-07-07

最新评论