ibd2sql 是解析mysql的ibd文件的工具.....
使用场景:
备份是十分重要的, 但往往存在没得备份/备份失效的场景, 这时候就是可以使用ibd2sql 来恢复数据了.
https://github.com/ddcw/ibd2sql/archive/refs/tags/v1.7.tar.gz
https://github.com/ddcw/ibd2sql/archive/refs/heads/main.zip
若现在就有加密表的解析的需求的话, 可以先参考: https://www.modb.pro/db/1839571466908610560
本次主要演示新增功能:drop表的恢复. (压缩表是自动解析的,使用者无需关注,也就不方便演示了....)
#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=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文件,那么恢复数据就简单了.
# 提取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;'
方法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的表不一定能恢复, 所以还是要做好备份.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。