MySql 利用frm与idb恢复数据

96
0晨鹤0
2018.10.25 12:33 字数 385

备份

有时候服务器突发故障,平时运维不到位,还没来来得急备份服务就挂了,那么数据库怎么办呢?只能先备份下原始文件了。在 innodb 引擎中,每个库是一个文件夹,每个表都有一个 .frm.idb 文件。但是光备份这两个然后还原是不行的,因为需要 idb 文件中的 tablespace idibdata1 中的一致才可以。

既然知道了原因那么也就有解决方案了,就是连同 ibdata1 文件一起备份。

还原

那么如何正确还原呢?

为了能让 mysql 正确识别我们的表,需要将旧的 ibdata1 文件恢复。但同时又不能影响新的数据,因此先将现在的 ibdata1 文件再次备份。

然后就可以还原 frmidb 以及 ibdata1 了。为了保险起见重启下数据库:

service mysql restart

这时候就发现数据都已经恢复过来了。那么就赶紧转储吧:

mysqldump -u[用户名] [数据库名] > [文件名]

mysqldump -u root demo > demo.sql

现在我们已经拿到了 sql 文件,之前恢复的数据可以删除了,最后再把 ibdata1 恢复回来。现在新创建一个库,导入 .sql 即可~

注意下文件权限问题。如果数据库用的是单独用户,恢复的备份文件可能需要 chown 改变一下用户组。否则 MySql 会无法启动,具体可以看错误日志。

写代码的日子
Web note ad 1