经常遇到这样的事情:莫名其妙关机,然后启动蓝屏,不能访问,最后决定重装系统。


  可惜这次的悲剧在于项目刚起步,暂且稳定,前段时间又一直忙于编码,对后台数据的备份没有太在意,导致数据库崩溃后只有上个月的备份数据。一直以为只要数据库装在d盘,c盘的覆盖不会有影响,结果恰恰是自己的不在意导致整个恢复过程及其艰难,耗时一天终于搞定,其中不乏有灰心丧气、准备放弃的想法。


  现把具体解决过程分享下吧:


  1、系统重装前,出于小心为上,工作人员备份了c盘数据到e盘,同时d、e两盘断点,c盘数据系统更新。


  2、重装完毕,安装数据库mysql,d盘中查找昨天的数据库文件,一直没找到,崩溃!最后只能找上个月的备份文件。恢复数据库成功后发现有些表打不开。(已经开始伤心了诶)


  3、初步判断可能安装的mysql有版本问题,决定安装新版本的mysql。但是安装不成功,后来经过摸索一番后发现是原来装的mysql没有卸载干净。


  4、3步完成卸载:删除安装目录下的文件、删除配置文件中的datadir变量目录中的文件、删除数据库数据存储目录中的文件。这三步可以根除mysql,判断是否清理成功的途径就是在系统服务中查看是否还有mysql服务。注意的是是否有这个服务!而不是是否启动!


  5、如果重新安装了mysql,安装后还是启动不了,并且彻底清除后再重新安装还是不行的话只能再分析原因,查找资料了。


  6、恢复上个月的数据库备份成功后你会发现还是有些表打不开,提示表不存在,但是在mysql视图窗口中却能看到相应的表。很奇怪,也很纠结对吧!!!同时发现打不开的表的引擎都是innoDB的,而可以打开的表的引擎则是MyISAMD的,由此判断可能是引擎的原因啦!


  7、网上的解决办法写的是mysql不支持innoDB,在php的配置文件中注释掉skip-innodb这行即可解决。查询服务器配置文件,发现已被注释,应该不是这方面的原因。但是无意中发现配置文件中的datadir变量指向的是c盘的某个目录,突然想到可能当初安装的时候数据库文件放到了c盘,还好刚开始有备份c盘文件。


  8、查找备份的c盘中的相应目录,突然找到了昨天的数据库文件。超开心哈哈


  9、把最新的数据库文件拷贝到新安装的数据库目录下发现还是不能打开innoDB的表,这是什么原因呢??查找资料,了解到innoDB跟MyISAM存储数据不一样,前缀的数据在上层目录中,而且可能是多个表数据存一个文件,后者每个表分三个文件存储,不同表间不相互影响。


  10、头脑一热,把昨天的数据库文件中的ibdata1文件直接覆盖了新安装的数据库中,启动发现数据库启动不了了!悲剧!可能是覆盖了原有的innoDB数据,导致新数据库崩溃。切记,千万不要覆盖!不然又杯具了


  11、卸载数据库后重新安装mysql,恢复数据库文件,还是打不开innoDB的表!怎么办?郁闷中。。。


  12、准备使用转成的sql把innoDB的表结构先建起来,然后手工输入丢失的数据,工作量不仅大,而且最重要的是我宝贵的数据都没了!欲哭无泪啊


  13、绝望中朋友突然给我说可以在她机器上本地测试下昨天的数据库备份,她安装的是多备份,即使导致数据库崩溃了,一键恢复就好了。想不到奇迹真的出现了!我的数据都出现了诶!我的网站又可以重新运行了。


  总结:备份,备份!只有在数据库崩溃的时候才知道它的价值!而且经过这次之后在这里提醒一句:备份数据时,千万一定要提前查看备份数据库是什么引擎,然后确定需要备份的数据库文件,不知道数据库存储位置的朋友看过来:在MySQL目录里的my.cnf配置文件中可找到。


  记得很久前看数据库方面的一本书时,前言第一句就是,“没有什么东西比数据库崩溃,更能让DBA在深夜中惊醒”。现在真的相信了。