总述
本文以linux安装的mysql记录一次恢复数据的过程。
一般情况,如果我们有一个数据库叫做testDB,里面有一张表叫testTable,那么就会在mysql的目录下创建一个叫做testDB的目录,同时在这个目录下,会生成两个文件,testTable.frm和testTable.idb。当然创建表或者增加数据还会修改其它文件,这边不强调这个。
如果这两个文件保留正常的情况下,我们就可以在一个新库里面恢复到之前的表结构以及数据。
恢复数据的前提是需要知道表结构,我自己的在操作的时候,因为知道表结构,手动创建的,所以没有真正执行这一步,不过网上有通过.frm恢复表结构的,可以参考一下,比如:
.frm恢复表结构
然后就可以利用idb文件恢复数据了,当然这个文章也很多,不过都是单表的,表太多的话,那操作起来实在太麻烦了,本文稍微处理了一下,能够快速批量的恢复数据。
前期准备
- 需要有正确的frm和idb文件。
- 第一步先得创建一个数据库,同时创建一个同名的表以及表结构。如果你很清楚表结构的话,直接跑sql还是非常快的。因为我们这边每个库里面的所有的表都是比较规范,有固定的sql,直接跑一下即可;如果没有的话,可能先得很费劲的恢复表结构。
具体操作
调整innodb的参数
修改/etc/my.cnf文件,增加一个强制恢复相关的参数:
innodb_force_recovery=1
至于什么意思,网上也有不少解释。
让表结构和表空间脱离
执行sql: