MySql InnoDb还原工具

摘要最近子牙SEO在处理一个网站的时候不小心弄坏了数据库,需要重装并还原数据库,发现数据表类型是独享式innodb结果悲剧了,无法挂载直接使用网站找了好多办法最好发现这个《MySql ...
所属分类:mysql windows V1 最后更新:2021年2月1日 22:43
最近子牙SEO在处理一个网站的时候不小心弄坏了数据库,需要重装并还原数据库,发现数据表类型是独享式innodb结果悲剧了,无法挂载直接使用网站找了好多办法最好发现这个《MySql InnoDb还原工具》作者推荐的东西最好用,这里推荐给我我的读者。

通过任意文件下载找到了mysql的备份,表类型是独享式innodb,由一个frm文件和一个ibd文件组成。

本以为直接复制到本地的mysql数据目录中即可恢复数据,但在查询时却发现并不如所愿:

mysql> select * from admin;
ERROR 1146 (42S02): Table 'test.admin' doesn't exist
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| admin          |
+----------------+
1 row in set (0.00 sec)

查找资料得知,innodb的表信息存放于datadir下面的ib_logfile*与ibdata1文件内。而由于事务的存在,这些文件在复制后并不能还原。

由于独享式innodb的数据实际上都保存在ibd文件内,于是尝试直接从ibd文件内恢复数据。最后在stackexchange(http://dba.stackexchange.com/questions/57120/recover-mysql-database-from-data-folder-without-ibdata1-from-ibd-files )找到了老外的一个思路:

1.使用mysqlfrm工具将frm转换为建表语句

2.创建空表

3.释放表空间

4.复制ibd文件,还原表空间

从http://dev.mysql.com/downloads/utilities/ 下载了mysqlfrm工具,执行时发现速度非常慢,同时不支持2003。于是下载其源码,发现其原理大致如下:

1.修改frm头部标志位为_DB_TYPE_HEAP,表示内存表

2.修改frm文件中保存的表引擎名称为MEMORY

3.复制文件到数据目录,执行show create table还原sql

4.替换语句中的MEMORY为原始引擎

对照以上原理,修改成了速度很快的c#版本。

使用工具进行测试,可以成功的还原数据,但操作非常麻烦,为了便捷操作最后写了这个工具批量恢复。

本地使用了十余个表进行了测试,总数据条数大概五百万条,没有出现任何问题。

附件内InnoDBRestore.exe是编译好的恢复工具,需要.net 4.0与mysql 5.6环境,命令行如下:

InnoDBRepair

例如:

InnoDBRepair root pass 3306 c:\dbcopy my_database

会将c:\dbcopy目录下所有的innodb和myiasm表还原到本地mysql的my_database数据库中,mysql必须是5.6或更高版本才能成功还原。

其源码为InnoDBRestore.cs,编译命令行:

csc /r:mysql.data.dll InnoDBRestore.cs

务必使用.net 4.0进行编译。

MySqlFrm.exe是c#版本的frm转sql工具,需要.net 4.0与mysql环境,命令行如下:

mysqlfrm

例如:

mysqlfrm root pass 3306 c:\dbcopy

会将c:\dbcopy目录下所有的frm转换为同名的建表sql并保存在frm文件所在目录(需要借助本地mysql进行转换)。

其源码为mysqlfrm.cs,编译命令行:

csc /r:mysql.data.dll mysqlfrm.cs

同样务必使用.net 4.0进行编译。

关于工具的利用:

在任意文件下载中可以尝试直接下载mysql的数据文件进行还原;mysql注入时可以load_file读取frm来偷懒,确定表并不是很大的时候(例如管理员表)甚至可以直接读取文件之后恢复。

脱裤的时候可以不管表类型直接打包了,比mysqldump快得多。innodb表压缩率在20%左右,打包下来并不会很大。

还原崩溃的mysql数据。

已知错误信息:

ERROR 1030 (HY000): Got error -1 from storage engine

换用高版本的mysql进行恢复,推荐使用5.6.24版本。

若出现此错误信息,务必手动删除@@datadir下刚刚指定的目标数据库,否则mysql服务停止后将无法启动。

(不一定有用但可能解决大问题的工具,留着备用吧)

解压密码见注释。

下载信息 MySql InnoDb还原工具 windows V1
最近更新2021-2-1
网盘密码发表评论并刷新可见
下载地址

文章末尾固定信息

weinxin
我的微信
我的微信
微信扫一扫
 
子牙
  • 本文由 子牙 发表于 2021 年 2 月 1 日22:44:43
  • 转载请务必保留本文链接:https://zyshop.top/development-language/mysql/243.html
  • 数据库管理
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证