Undrop-for-innodb从删库到跑路

来自三线的随记
Admin讨论 | 贡献2018年10月11日 (四) 20:31的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

undrop-for-innodb --->mysql innodb引擎翻车用的恢复工具

教程1:http://blog.51cto.com/icenycmh/2158814?source=dra

教程1->快照:http://archive.fo/dydbj

git->https://github.com/twindb/undrop-for-innodb

  1. 寻找表ID的时候,配合grep命令使用有可能找不到有效的结果,去掉grep解决
  2. 最后导出来的数据一开始一堆乱码,并不是编码问题,而是c_parser ->-t参数CREATE statement 文件里面的语句有问题,并不是原来表的结构
  3. 如上一条所示,需要提前准备表的结构文件,不然的话也得表结构恢复才能进行数据恢复
  4. 这工具针对不同的innodb_file_per_table方式用法有不同
  5. innodb_file_per_table参数描述了innodb存储引擎存储数据的方式。如果为OFF,则库表的所有数据都存放在ibdata*的共享表空间内,若为ON,则每个表会生成独立的文件来存储数据。
  6. show VARIABLES like '%innodb_file_per_table%'

大概步骤

  1. stream_parser扫描出磁盘页文件
  2. c_parser -> 0000000000000001.page + SYS_TABLES.sql ->得到表ID
  3. c_parser + 表ID -> 0000000000000003.page + SYS_INDEXES.sql ->得到磁盘页ID
  4. c_parser 磁盘页文件->-o *** -l ****导出数据
  5. 导出来的数据可能看起来不是SQL语句,用source命令导入就是了,两个文件(-o -l生成的)
  6. 讲道理2-3步骤其实就是根据存在的表结构提取数据

没事别手贱