Home  >  Article  >  Database  >  人工误删除InnoDB ibdata数据文件如何恢复?

人工误删除InnoDB ibdata数据文件如何恢复?

WBOY
WBOYOriginal
2016-06-07 17:40:341016browse

在日常工作中,因不熟悉InnoDB引擎,在群里看到有很多人误删除了InnoDBibdata(数据文件)和ib_logfile(redolog重做事务日志文件),结果导致了杯具的发生。如

在日常工作中,因不熟悉InnoDB引擎,在群里看到有很多人误删除了InnoDB ibdata(数据文件)和ib_logfile(redo log重做事务日志文件),结果导致了杯具的发生。如果你有做主从复制同步,那还好,如果是单机呢?如何恢复?

下面,香港服务器,请看恢复演示:

一、你可以用sysbench模拟数据的写入,如:

二、rm -f ib*

三、此时我估计你被吓得够呛,脸白手哆嗦,如果你看到这篇文章,心可以稳稳了,没事,可以恢复的。

四、此时,你会发现数据库还可以正常工作,数据照样可以写入,切记,这时千万别把mysqld进程杀死,否则你只有跳楼了,神仙都没法救你。

五、先找到mysqld的进程pid

  • # netstat -ntlp | grep mysqld 
  • tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      30426/mysqld  
  • 我这里是30426

    六、执行关键的一步

    10,11,4,9就是我们要恢复的文件。

    七、你可以把前端业务关闭,或者执行FLUSH TABLES WITH READ LOCK;这一步的作用是让数据库没有写入操作,以便后面的恢复工作。

    八、如何验证没有写入操作呢?分以下几步,美国空间,记住要结合在一起观察。

  • # 让脏页尽快刷入到磁盘里。
  • 九、上面一系列确认工作完成之后,我们就可以恢复了。还记得刚才我们记录的删除文件吗?

    把这些文件拷贝到原来的目录下并修改用户属性即可。

    并修改用户属性

  • #cd /u2/mysql/data/ 
  • #chown mysql:mysql ib* 
  • 十、大功告成,只需要重启MySQL即可。

  • /etc/init.d/mysql restart 
  • 怎样?就这么简单,你也动手试试吧。

     

    本文出自 “贺春旸的技术专栏” 博客,美国服务器,请务必保留此出处

    Statement:
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn