ibd2sql工具可能是您的救命稻草。这是一款能将离线ibd文件转换为sql语句的神器,可以帮助恢复宝贵的数据。
ibd2sql 是一个使用纯 python 3 编写的工具,用于离线解析 mysql innodb 存储引擎的 ibd 文件,并将其转换为 sql 语句。该工具无需任何第三方依赖包,使用 gpl-3.0 许可证发布。
ibd2sql优点
- 方便: 提取表的 ddl(数据定义语言)。
- 实用: 支持替换库名(–schema)和表名(–table),可以在 sql 语句中输出完整的字段(–complete)。
- 简单: 纯 python 3 代码编写,无依赖包。
- 支持众多数据类型: 支持所有 mysql 数据类型。
- 支持复杂的表结构: 支持分区表、注释、主键、外键、约束、自增、普通索引、前缀索引、主键前缀索引、唯一索引、复合索引、默认值、符号、虚拟字段、instant、无主键等情况的表。
- 数据误删恢复: 可以输出被标记为已删除的数据。
- 安全: 离线解析 ibd 文件,仅需读取权限。
- ibd文件强制解析:ibd文件如果损坏,可以恢复部分数据。
- 支持范围广: 支持 mysql 5.6、5.7、8.0、8.4、9.0。
ibd2sql缺点
- 性能: 对于大型表,解析和生成 sql 语句的过程可能较慢。
- 数据完整性: 如果 ibd 文件本身已经严重损坏,恢复的数据可能不完整。
- 资源消耗: 生成的 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文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论