备份
有时候服务器突发故障,平时运维不到位,还没来来得急备份服务就挂了,那么数据库怎么办呢?只能先备份下原始文件了。在 innodb 引擎中,每个库是一个文件夹,每个表都有一个 .frm
和 .idb
文件。但是光备份这两个然后还原是不行的,因为需要 idb 文件中的 tablespace id
与 ibdata1
中的一致才可以。
既然知道了原因那么也就有解决方案了,就是连同 ibdata1
文件一起备份。
还原
那么如何正确还原呢?
为了能让 mysql 正确识别我们的表,需要将旧的 ibdata1
文件恢复。但同时又不能影响新的数据,因此先将现在的 ibdata1
文件再次备份。
然后就可以还原 frm
、idb
以及 ibdata1
了。为了保险起见重启下数据库:
service mysql restart
这时候就发现数据都已经恢复过来了。那么就赶紧转储吧:
mysqldump -u[用户名] [数据库名] > [文件名]
mysqldump -u root demo > demo.sql
现在我们已经拿到了 sql 文件,之前恢复的数据可以删除了,最后再把 ibdata1
恢复回来。现在新创建一个库,导入 .sql
即可~
注意下文件权限问题。如果数据库用的是单独用户,恢复的备份文件可能需要
chown
改变一下用户组。否则 MySql 会无法启动,具体可以看错误日志。