MySQL · 数据恢复 · undrop-for-innodb
来源:互联网 发布:zeppelin 源码编译 编辑:程序博客网 时间:2024/06/15 08:59
undrop-for-innodb 是针对 innodb 的一套数据恢复工具,可以从文件级别恢复诸如:DROP/TRUNCATE table, 删除表中某些记录,innodb 文件被删除,文件系统损坏,磁盘 corruption 等几种情况。本文简单介绍下使用方法和原理浅析。
准备
git clone https://github.com/twindb/undrop-for-innodb.git make
需要联合 MySQL 的安装路径编译工具 sys_parser,
gcc `$basedir/bin/mysql_config --cflags` `$basedir/bin/mysql_config --libs` -o sys_parser sys_parser.c
需要的工具都已经完备:
- 重要的工具:
c_parser && stream_parser && sys_parser
- 其中
test.sh && recover_dictionary.sh && fetch_data.sh
是测试的脚本,可以看下里面的逻辑理解工具的用法。 - 三个目录
- dictionary 里面是模拟 innodb 系统表结构写的 CREATE TABLE 语句,innodb 的系统表对用户不可见,可以在 informatioin_schema 表中找到一些值,但实际上系统表是保存在 ibdata 固定的页上的。
- sakila 是一些 SQL 语句,用来测试用。
- include 是从 innodb 拿出来的一些用到的头文件和源文件。
我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。
DROP TABLE
表结构恢复
一般情况下表结构是存储在 frm 文件中,drop table 会删除 frm 文件,还好我们可以从 innodb 系统表里读取一些信息恢复表结构。innodb 系统表有
SYS_COLUMNS | SYS_FIELDS | SYS_INDEXES | SYS_TABLES
关于系统表结构的具体介绍可以参考 系统表 , 这几个表对于恢复非常重要,下面以一个恢复表结构的例子来说明。
使用目录 sakila/actor.sql 中的例子:
CREATE TABLE `actor` ( `actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `first_name` varchar(45) NOT NULL, `last_name` varchar(45) NOT NULL, `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`actor_id`), KEY `idx_actor_last_name` (`last_name`)) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8; insert into actor(first_name, last_name) values('zhang', 'jian'); insert into actor(first_name, last_name) values('zhan', 'jian'); insert into actor(first_name, last_name) values('zha', 'jian'); insert into actor(first_name, last_name) values('zh', 'jian'); insert into actor(first_name, last_name) values('z', 'jian');mysql> checksum table actor;+-----------+------------+| Table | Checksum |+-----------+------------+| per.actor | 2184463059 |+-----------+------------+ 1 row in set (0.00 sec)
DROP TABLE actor
需要从系统表中恢复,而系统表是保存在 $datadir/ibdata1 文件中的,使用工具 stream_parser
解析文件内容。
$./stream_parser -f /home/zj118228/rds_5616/data/ibdata1
执行完毕后会在当前目录下生成文件夹 pages-ibdata1
, 目录下按照每个页为一个文件,分为索引页和数据较大的 BLOB 页,我们访问系统表的话,是存在索引页中的。使用另外一个重要的工具 c_parser
来解析页的内容。
$./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/0000000000000001.page -t dictionary/SYS_TABLES.sql | grep 'sakila/actor' 000000005927 24000001C809C6 SYS_TABLES "sakila/actor" 52 4 1 0 80 "" 38
参数解析:
- 4 表示文件格式是 REDUNDANT,系统表的格式默认值。另外可以取值 5 表示 COMPACT 格式,6 表示 MySQL 5.6 格式。
- D 表示只恢复被删除的记录。
- f 后面跟着文件。
- t 后面跟着 CREATE TABLE 语句,需要根据表的格式来解析文件。
原文链接
阅读全文
0 0
- MySQL · 数据恢复 · undrop-for-innodb
- MySQL · 数据恢复 · undrop-for-innodb
- MySQL · 数据恢复 · undrop-for-innodb
- MySQL • 数据恢复 • undrop-for-innodb
- UnDROP tool for InnoDB
- undrop for innodb c_parser 不完美之处
- MySQL数据库InnoDB数据恢复工具
- Mysql Innodb的恢复
- Mysql恢复(InnoDB)数据表
- MySQL InnoDB表恢复
- innodb 引擎数据恢复
- innodb 引擎数据恢复
- MySQL数据库InnoDB数据恢复工具使用总结
- MySQL数据库InnoDB数据恢复工具使用总结
- MySQL数据库InnoDB引擎下服务器断电数据恢复
- mysql innodb只有 .frm .ibd 文件 如何恢复数据
- 【MySQL】Innodb 恢复工具介绍
- MySQL的Innodb表恢复
- Visual C++ 2005 中的命名返回值优化
- 找出占用某个端口的服务
- Android贝塞尔曲线粘性下拉刷新仿QQ粘性拉动效果
- 程序员听音乐——古典音乐
- Chrome Extension 中的 CSP(Content Security Policy) 开发小记
- MySQL · 数据恢复 · undrop-for-innodb
- 单例模式的6种实现方式
- 《android多媒体api》之VideoView 视频播放控件
- leetcode 481. Magical String 神奇字符串
- python -- 基础知识2
- (0071)iOS开发之Category VS Extension区别理解
- git密码自动保存
- Jboss & Tomcat 性能调优整理
- 机器学习