导读
ibd2sql 是解析mysql的ibd文件的工具…
使用场景:
- 不小心 delete 数据了怎么办?
- 不小心 drop 表怎么办?
- 数据库死活起不来怎么办?
备份是十分重要的, 但往往存在没得备份/备份失效的场景, 这时候就是可以使用ibd2sql 来恢复数据了.
v1.7版本说明
下载地址:
https://github.com/ddcw/ibd2sql/archive/refs/tags/v1.7.tar.gz
https://github.com/ddcw/ibd2sql/archive/refs/heads/main.zip
功能更新:
- 支持压缩页的解析(zlib&lz4)
- 支持drop表的恢复
3. 加密页的支持(要求keyring file选项, 所以下个大版本再更新)
若现在就有加密表的解析的需求的话, 可以先参考: https://www.modb.pro/db/1839571466908610560
BUG修复:
- varchar <=255 时使用1bytes存储大小
- ucs2,utf16,utf32 字符集支持
- instant nullable计算方式.(_COLUMN_COUNT之前没写完.)
其它:
- ibd2sql/innodb_page_sdi.py中的COLUMN_COLL默认值设置为True, 即默认显示字段字符集(若字段字符集和表不一致的话)
drop表的恢复 演示
本次主要演示新增功能:drop表的恢复. (压缩表是自动解析的,使用者无需关注,也就不方便演示了…)
下载安装ibd2sql
#yum install python3 -y
wget https://github.com/ddcw/ibd2sql/archive/refs/heads/main.zip
unzip main.zip
cd ibd2sql-main
复制
准备测试表并删除
不要在生产环境测试!
select * from db1.t20241028;
checksum table db1.t20241028;
drop table db1.t20241028;
复制
于是我们就没有了那张表…
扫描磁盘
扫描对应文件所在目录 所在的文件系统, 得到误删表的inode号, 我这里知道了表名字,就直接grep了.
150GB的文件系统扫描起来可能得花个几分钟
df -hT /data/mysql_3314/mysqldata/db1 python3 xfs_recovery_v0.2.py /dev/mapper/centos-root
复制
于是我们就得到了被删除表的inode:270238132
根据inode恢复文件
# 查看inode=270238132文件的详情, 比如大小(extent_size)之类的
python3 xfs_recovery_v0.2.py /dev/mapper/centos-root 270238132
# 恢复inode=270238132文件到 /tmp/t20241028.ibd
python3 xfs_recovery_v0.2.py /dev/mapper/centos-root 270238132 /tmp/t20241028.ibd
复制
根据ibd恢复数据
既然得到了ibd文件,那么恢复数据就简单了.
方法1(推荐)
# 提取DDL, 并在数据库创建一样的表, 然后导入该表空间/数据文件/ibd
python3 main.py /tmp/t20241028.ibd
python3 main.py /tmp/t20241028.ibd | mysql -h127.0.0.1 -P3314 -p123456
mysql -h127.0.0.1 -P3314 -p123456 -e 'alter table db1.t20241028 discard tablespace'
cp -ra /tmp/t20241028.ibd /data/mysql_3314/mysqldata/db1
chown mysql:mysql /data/mysql_3314/mysqldata/db1/t20241028.ibd
mysql -h127.0.0.1 -P3314 -p123456 -e 'alter table db1.t20241028 import tablespace'
# 验证
mysql -h127.0.0.1 -P3314 -p123456 -e 'select * from db1.t20241028;'
mysql -h127.0.0.1 -P3314 -p123456 -e 'checksum table db1.t20241028;'
复制
方法2
方法1看起来还是太麻烦了, 所以我们可以使用简单点的方法2
# 提取出ddl和dml并导入数据库
mysql -h127.0.0.1 -P3314 -p123456 -e 'drop table db1.t20241028' # 清除方法1的数据
python3 main.py /tmp/t20241028.ibd --ddl --sql | mysql -h127.0.0.1 -P3314 -p123456
mysql -h127.0.0.1 -P3314 -p123456 -e 'select * from db1.t20241028;'
复制
方法2就简单多了. 一步到位.
总结
被drop的表不一定能恢复, 所以还是要做好备份.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
1642次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
629次阅读
2025-04-25 15:30:58
墨天轮个人数说知识点合集
JiekeXu
465次阅读
2025-04-01 15:56:03
MySQL数据库当前和历史事务分析
听见风的声音
452次阅读
2025-04-01 08:47:17
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
392次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
370次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
344次阅读
2025-04-15 14:48:05
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
316次阅读
2025-04-07 12:14:29
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
211次阅读
2025-04-15 15:27:53
[MYSQL] 服务器出现大量的TIME_WAIT, 每天凌晨就清零了
大大刺猬
188次阅读
2025-04-01 16:20:44
TA的专栏
PYTHON解析MYSQL
收录57篇内容
热门文章
MYSQL 文件解析 (3) 数据文件(ibd)解析
2023-04-23 2560浏览
ibd2sql解析ibd文件为SQL
2023-04-27 1919浏览
[MYSQL] 数据恢复, 无备份, 只剩一个 ibd 文件 怎么恢复数据?
2024-04-12 1743浏览
MYSQL 文件解析 (1) binlog 文件解析
2023-04-23 1520浏览
mysql-5.7.38启动流程源码解读
2022-09-26 1444浏览
最新文章
[ibd2sql] mysql数据恢复案例003 -- 有坏块的表怎么解析?
6天前 74浏览
[MYSQL] 从库停止复制进程,为啥主库日志报错[ERROR]mysqld: Got an error reading communication packets
2025-04-15 79浏览
[MYSQL] 新搭建个备库 却报错Last_SQL_Errno: 1396
2025-04-10 80浏览
[MYSQL] 自定义mysql脱敏中间件 -- 对指定连接进行指定字段的数据脱敏
2025-04-08 90浏览
[ibd2sql] mysql数据恢复案例002 -- 解析mysql 5.7的表超过38个字段之后的小BUG(已修复)
2025-04-04 35浏览
目录