前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[ibd2sql] ibd2sql v1.7发布(支持drop表的恢复)

[ibd2sql] ibd2sql v1.7发布(支持drop表的恢复)

原创
作者头像
大大刺猬
发布2024-10-29 14:17:24
2680
发布2024-10-29 14:17:24
举报
文章被收录于专栏:大大刺猬

导读

ibd2sql 是解析mysql的ibd文件的工具.....

使用场景:

  1. 不小心 delete 数据了怎么办?
  2. 不小心 drop 表怎么办?
  3. 数据库死活起不来怎么办?

备份是十分重要的, 但往往存在没得备份/备份失效的场景, 这时候就是可以使用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

功能更新:

  1. 支持压缩页的解析(zlib&lz4)
  2. 支持drop表的恢复 3. 加密页的支持(要求keyring file选项, 所以下个大版本再更新)

若现在就有加密表的解析的需求的话, 可以先参考: https://www.modb.pro/db/1839571466908610560

BUG修复:

  1. varchar <=255 时使用1bytes存储大小
  2. ucs2,utf16,utf32 字符集支持
  3. instant nullable计算方式.(_COLUMN_COUNT之前没写完.)

其它:

  1. ibd2sql/innodb_page_sdi.py中的COLUMN_COLL默认值设置为True, 即默认显示字段字符集(若字段字符集和表不一致的话)

drop表的恢复 演示

本次主要演示新增功能:drop表的恢复. (压缩表是自动解析的,使用者无需关注,也就不方便演示了....)

下载安装ibd2sql

代码语言:shell
复制
#yum install python3 -y
wget https://github.com/ddcw/ibd2sql/archive/refs/heads/main.zip
unzip main.zip
cd ibd2sql-main

准备测试表并删除

不要在生产环境测试!

代码语言:sql
复制
select * from db1.t20241028;
checksum table db1.t20241028;
drop table db1.t20241028;

于是我们就没有了那张表....

扫描磁盘

扫描对应文件所在目录 所在的文件系统, 得到误删表的inode号, 我这里知道了表名字,就直接grep了.

150GB的文件系统扫描起来可能得花个几分钟

代码语言:shell
复制
df -hT /data/mysql_3314/mysqldata/db1
python3 xfs_recovery_v0.2.py /dev/mapper/centos-root

于是我们就得到了被删除表的inode:270238132

根据inode恢复文件

代码语言:shell
复制
# 查看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(推荐)

代码语言:shell
复制
# 提取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

代码语言:shell
复制
# 提取出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的表不一定能恢复, 所以还是要做好备份.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • v1.7版本说明
    • 下载地址:
      • 功能更新:
        • BUG修复:
          • 其它:
          • drop表的恢复 演示
            • 下载安装ibd2sql
              • 准备测试表并删除
                • 扫描磁盘
                  • 根据inode恢复文件
                    • 根据ibd文件恢复数据
                      • 方法1(推荐)
                      • 方法2
                  • 总结
                  相关产品与服务
                  云数据库 MySQL
                  腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档