使用ibd2sql恢复mysql环境被drop/truncate的表【转】

news/2026/1/18 21:22:55/文章来源:https://www.cnblogs.com/paul8339/p/19499148

导读

ibd2sql v2.2版本新增了恢复drop和truncate的表的功能. 这么叼? 我来瞅瞅呢

原理

虽然之前讲过原理, 但还是来简单回顾回顾:
DROP TABLE是delete和insert系统表, 那么被删表之前的元数据信息就能找到, 虽然数据文件没了,但磁盘不会马上覆盖, 我们就能拿着元数据信息去磁盘找相关的PAGE.
image.png
TRUNCATE TABLE 是对系统表做的update,看不到被删表之前的元数据信息了; 5.7之前和现在元数据信息一样, 无所谓, 8.0的话就只能使用排除法了, 即排除有主的page,剩下的再一个个试.

可能有很多小伙伴关心: 怎么判断是需要的page呢?
从磁盘读N个块,然后判断是否是page,是否是index page,是否页校验通过… 大概如下:
image.png

现在来看看ibd2sql该怎么使用才能恢复数据
流程就是上面的从系统表提取元数据信息, 然后再扫描磁盘匹配即可. 当然每一步都是可以拆开的.
image.png
看着头都大了. 我们直接实践吧.

5.7的元数据文件是ibdata1, 8.0是mysql.ibd, 请自己根据自己的版本做替换, 演示例子可能会交换着来.

恢复被drop的表

实际使用可能需要考虑很多情况, 我这里简单列出一些场景.

这里使用的是5.7的环境; 如果是你是mysql 8.0环境, 请将 ibdata1换成mysql.ibd 其它不变

场景1: 直接恢复

不小心drop了一张表, 啥也不管,直接干.

-- 查看表数据,方便验证 
select * from t20260108_101;
-- 直接drop
drop table t20260108_101;

image.png
然后我们扫描磁盘恢复被删除的数据:

python3 main.py /data/mysql_5744/mysqldata/ibdata1 --scan /dev/vdb --sql

image.png
是不是嘎嘎简单?

场景2 存在多张表被drop的时候

实际中, 可能有多张表被删除, 我们需要先筛选一番

python3 main.py /data/mysql_5744/mysqldata/ibdata1 --scan  --ddl

image.png
这里有2张表, 我们可以使用--set table来指定需要的表, 并且我们不要直接输出sql, 先输出为page (不要–sql就是输出page形式,也就是二进制文件)

python3 main.py /data/mysql_5744/mysqldata/ibdata1 --scan /dev/vdb --set table=t20260108_101

image.png
然后我们再扫描上面获取的目录

python3 main.py /data/mysql_5744/mysqldata/ibdata1 --scan ./ibd2sql_auto_dir_20260108_155924 --sql

image.png

场景3 全都要

磁盘下所有的index page我全都要, 主要是怕万一被覆盖了.

python3 main.py --scan /dev/vdb --set indexid=0,all --parallel 8

image.png
image.png
然后再自己去找需要的page并解析. 比如我要解析ibd2sql_auto_dir_20260108_160541/index/0_0000000037_0000000000000058.page则可以使用

python3 main.py ibd2sql_auto_dir_20260108_160541/index/0_0000000037_0000000000000058.page --sdi /data2/db1/t20260108_101.ibd --set leafno=0 --set rootno=0 --force --sql

image.png

5.7的ibdata1中能得到的元数据信息不多, 所以需要提供相关的表结构元数据信息, 然后使用–sdi指定即可.

恢复被truncate的表

mysql 5.7恢复被truncate的表

truncate相当于drop+create, drop的数据很快会被重写, 所以我们整个大点的表.
image.png
然后我们找下相关表的tableid值为62
image.png
再根据tableid去找indexid,值为62(这里和table_id巧合的重合了…)
image.png
然后我们扫描indexid=62的page

python3 main.py --scan /dev/vdb --set indexid=62

image.png
最后我们指定sdi/frm信息去解析对于的页即可.

python3 main.py ./ibd2sql_auto_dir_20260108_162317/index/0_0000000041_0000000000000062.page  --sdi /data/mysql_5744/mysqldata/db1/t20260108_105.frm --set leafno=0 --set rootno=0 --force --sql --limit 1

image.png
419W的数据量,恢复了411W 还行.

8.0 恢复被truncate的表

8.0的就有难度了, 因为truncate的表是update的系统表, 看不到truncate之前的indexid了, 而且测试发现truncate前后表的indexid是变化的, 也就是无法根据indexid直接去找了.
但也不是完全没办法:

  1. 扫描所有的page,
  2. 排除当前已使用的indexid,
  3. 从剩下得到page里面一个个试.

先准备环境, 这次就200W数据吧.
image.png
扫描所有page

python3 main.py --scan /dev/vdc --set indexid=0,all

image.png

然后我们排除下已有的Indexid
image.png

可以简单使用shell筛选下:

ls ./ibd2sql_auto_dir_20260108_163711/index/ | awk -F '_' '{print $NF}' | awk -F '.' '{print $1}' | sort > /tmp/t20250108_01.txt
python3 main.py /data2/mysql.ibd --set table=indexes --sql --delete with  | grep PRIMARY | awk -F ',' '{printf "%016d\n",$2}' | sort > /tmp/t20250108_02.txt
diff /tmp/t20250108_01.txt /tmp/t20250108_02.txt | grep '^<' | wc -l

image.png
还有85个, 就一个个试呗… 当然了, 还可以看下大小, 太小的也可以排除. 我这块盘就一个大表, 所以直接就定位到了. 然后解析下数据:
image.png
truncate之前是2097152条数据, 现在恢复的是2095322条数据, 就丢几千条, 还是能接受的.

总结

ibd2sql v2.2版本支持了 mysql 5.7和8.0的DROP TABLETRUNCATE TABLE的恢复, 但drop/truncate表的恢复技术只是保底的, 备份是很重要的.

本次只列出了一些用法, 更多用法可自行组合.

参考:
https://github.com/ddcw/ibd2sql/releases/tag/v2.2

软件下载地址:

 https://github.com/ddcw/ibd2sql/archive/refs/tags/v2.2.tar.gz

转自

https://mp.weixin.qq.com/s/chO43BISJPqz9T9auLnCOA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1179439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python+Vue的基于协同过滤算法的图书馆管理系统 django Pycharm flask

目录 这里写目录标题目录项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 …

从Hadoop到Spark:大数据隐私保护技术演进史

从Hadoop到Spark:大数据隐私保护技术演进史 关键词:大数据隐私保护、Hadoop、Spark、数据脱敏、差分隐私、同态加密、访问控制 摘要:本文深入探讨了大数据处理框架从Hadoop到Spark演进过程中隐私保护技术的发展历程。文章首先介绍大数据生态系统的演变背景,然后详细分析各阶…

【图像机密】基于压缩感知中密钥控制测量矩阵的新型图像压缩-加密混合算法研究附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

Python+Vue的HPV疫苗接种管理系统的设计与实现 django Pycharm flask

目录 这里写目录标题目录项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 …

深入解析:AIOps / AI-Network / 智能运维:迈向自治网络的核心引擎

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【毕业设计】基于springboot+微信小程序的服装商城的设计与实现小程序(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

嵌入式 Modbus 实战,从协议原理到 STM32 RTU 通信落地

在工业自动化、物联网设备通信中,Modbus 协议因 “简单可靠、兼容性强” 成为事实标准 —— 它无需复杂硬件支持,仅通过串口(RS485/RS232)即可实现设备间数据交互,广泛应用于传感器、PLC、单片机等嵌入式设备。本…

嵌入式模型轻量化实战,从技术原理到 STM32 部署落地

在单片机、智能传感器等嵌入式设备上部署 AI 模型,核心矛盾是 “模型庞大” 与 “资源有限” 的冲突 —— 多数嵌入式设备仅有几十 KB 内存、几百 KB 闪存,且无独立 GPU。模型轻量化通过 “精简结构、降低精度、传承…

吐血推荐9个AI论文工具,助本科生轻松写毕业论文!

吐血推荐9个AI论文工具&#xff0c;助本科生轻松写毕业论文&#xff01; AI工具让论文写作不再难 在如今的学术环境中&#xff0c;越来越多的学生开始借助AI工具来提升论文写作的效率和质量。尤其是在面对毕业论文时&#xff0c;时间紧迫、内容繁杂&#xff0c;很多同学都感到无…

详细介绍:Axure快速精通指南:从入门到高保真原型设计

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

《实时渲染》第1章-绪论-1.1内容概览

实时渲染是通过图形硬件快速生成交互式3D图像的技术,强调高帧率、低延迟与视觉真实感。实时渲染 1. 概述 实时渲染是指在计算机上快速渲染图像。它是计算机图形中交互性最高的领域。图像出现在屏幕上,观看者做出动作…

15.Slam算法的环境搭建与测试

一、前期准备 1. 软件 / 镜像下载 虚拟机软件&#xff1a;VMware Workstation Pro&#xff08;官网下载试用版即可&#xff0c;或用免费的 VirtualBox&#xff09;&#xff1b;Ubuntu 镜像&#xff1a;Ubuntu 20.04 LTS&#xff08;推荐&#xff0c;ROS Noetic 适配性最好&am…

AerialMegaDepth:学习空中-地面重建和视图合成 - MKT

AerialMegaDepth:学习空中-地面重建和视图合成AerialMegaDepth:学习空中-地面重建和视图合成https://github.com/kvuong2711/aerial-megadepth

2026年PVC地板厂家口碑红榜,无醛环保型产品实力品牌甄选 - 品牌鉴赏师

引言在当今建筑装饰领域,PVC地板以其环保、耐用、美观等诸多优势,受到了越来越多消费者的青睐。然而,市场上PVC地板厂家众多,产品质量参差不齐,如何选择一家可靠的厂家成为了消费者面临的难题。为了帮助消费者做出…

线段树多懒标记

最近在思考:如何对一个序列维护带有两种区间修改的多查询问题。这样不可避免地需要对两种修改操作分别维护一种懒标记。但显然,不能将两种懒标记独立看待,因为对于两种操作,先后顺序不同会造成不同的影响。因此如何…

vue基于Python 新疆特色美食电商平台设计与实现flask django Pycharm

目录 这里写目录标题目录项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 …

Python+Vue的 林海生态园自动销售门票管理系统 django Pycharm flask

目录 这里写目录标题目录项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 …

Python+Vue的笔记管理系统的设计与实现 django Pycharm flask

目录 这里写目录标题目录项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 …

GESP认证C++编程真题解析 | 202306 三级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

ESP8266-01S学习笔记

这里写目录标题传模式 vs 非透传模式解析JSON的差异一、透传模式 vs 非透传模式的JSON解析1.1 两种模式下的串口数据格式对比非透传模式&#xff08;默认模式&#xff09;透传模式1.2 两种模式对比表1.3 透传模式设置代码二、堆栈设置问题详解2.1 为什么需要调整堆栈大小&#…