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查询不区分大小写的两种解决方式

    偶然机会,发现一次查询匹配数据的时候没有区分大小写,如,username = ‘WangWu’,username = 'wangwu’的记录也被查出来,本文介绍解决这种情况的两种方式,并通过代码讲解的非常详细,需要的朋友可以参考下
    2025-01-01
  • MySQL中UPDATE JOIN语句的使用详细

    MySQL中UPDATE JOIN语句的使用详细

    UPDATE JOIN是MySQL中一种结合UPDATE语句和JOIN操作的技术,本文主要介绍了MySQL中UPDATE JOIN语句的使用详细,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • MySQL定时备份数据库操作示例

    MySQL定时备份数据库操作示例

    这篇文章主要介绍了MySQL定时备份数据库操作,结合实例形式分析了MySQL定时备份数据库相关命令、原理、实现方法及操作注意事项,需要的朋友可以参考下
    2020-03-03
  • MySQL之存在则更新,否则就插入数据

    MySQL之存在则更新,否则就插入数据

    这篇文章主要介绍了MySQL之存在则更新,否则就插入数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • mysql中数据统计的技巧备忘录

    mysql中数据统计的技巧备忘录

    mysql是常用数据库,对于数字操作相关的东西相当方便,这篇文章主要给大家介绍了关于mysql中数据统计技巧的相关资料,非常具有实用价值,需要的朋友可以参考下
    2018-05-05
  • 5招带你轻松优化MySQL count(*)查询性能

    5招带你轻松优化MySQL count(*)查询性能

    最近在公司优化了几个慢查询接口的性能,总结了一些心得体会拿出来跟大家一起分享一下,文中的示例代码讲解详细,希望对大家会有所帮助
    2022-11-11
  • linux下安装mysql及mysql.sock问题

    linux下安装mysql及mysql.sock问题

    最近在linux上装mysql时遇到一些棘手的问题,百思不得其解,下面小编给大家带来了linux下安装mysql及mysql.sock问题,感兴趣的朋友一起看看吧
    2018-03-03
  • 安装MySQL phpMyAdmin cpolar实现远程访问连接的操作步骤

    安装MySQL phpMyAdmin cpolar实现远程访问连接的操作步骤

    这篇文章主要给大家介绍了安装 MySQL phpMyAdmin cpolar实现远程访问连接的流程步骤,文中有详细的图文介绍,具有一定的参考价值,需要的朋友可以参考下
    2023-08-08
  • MySQL实现异步复制的示例

    MySQL实现异步复制的示例

    MySQL的复制就是将来自一个MySQL数据库服务器(主库)的数据复制到一个或多个MySQL数据库服务器(从库),本文主要介绍了MySQL实现异步复制的示例,感兴趣的可以了解一下
    2024-09-09
  • MySQL占用CPU过高,排查原因及解决方案

    MySQL占用CPU过高,排查原因及解决方案

    这篇文章主要介绍了MySQL占用CPU过高,排查原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论