Ubuntu系统使用备份恢复已损坏MySQL数据库
数据库损害的情况经常发生,尤其是OpenVZ VPS,当物理服务器非正常关机,而是断电或者直接崩溃时,MySQL数据库损坏几乎是不可避免的,尤其是数据库量比较大的时候。Kaijia已经遇到过数次数据库损坏的情况,一般情况下MySQL的调试日志里面会直接给出修复提示,比如在my.cnf中增加:
1 |
innodb_use_native_aio = 0 |
关闭异步I/O操作等,此类操作一般能恢复数据库的正常使用。但这次Kaijia遇到了一次由于物理服务器宕机造成的MySQL数据库损坏,并且错误信息也没有给出任何修复提示,此时应该按照MySQL文档中给出的步骤恢复InnoDB,这个过程相对比较复杂,并且考虑到损害的数据库并不大,也不常用,并且每小时都有备份,于是Kaijia决定直接通过还原备份恢复已损坏MySQL数据库文件。
使用备份恢复数据库文件的思路要删除原先的数据库然后重新建立数据库文件,并将备份中的数据导入到新的数据库中完成恢复。首先要删除(或移动)位于/var/lib/mysql下的MySQL数据库文件:
1 |
mv /var/lib/mysql /var/lib/mysql-broken |
接下来使用dpkg重建数据库:
1 |
dpkg-reconfigure mysql-server-5.5 |
在Ubuntu 14.04中,如果安装了MySQL 5.6则为:
1 |
dpkg-reconfigure mysql-server-5.6 |
接下来交互界面会提示输入数据库的root用户密码。虽然提示了“If this field is left blank, the password will not be changed.”(如果留空将不会修改密码),但Kaijia尝试后发现如果留空的话仍会随机生成新密码,因此数据库密码还是必须输入的。
步骤完成后即可导入原先的备份:
1 |
mysql -p < backup.sql |
这样使用备份恢复MySQL数据库就完成了,当然Kaijia这种情况要求有较新、较完整的数据库备份,因此养成定时备份的习惯是必须的。在生产环境中,使用主从复制、数据库同步等方法可以有效避免数据库损坏等情况,这些方法都是值得推荐的。
评论