问题来源:在给系统打补丁之后就需要重启。第二天发现MySQL服务无法自启动,然后尝试手动重启也不行。提示“windows无法启动mysql服务,位于本地计算机上。错误1067:进程意外终止”。
然后用“错误1067:进程意外终止”去百度,按照搜索结果前面操作方法试试,发现还是无法启动mysql服务。网上的哪些各种解决方案都是没有针对性,与其瞎猜乱试,还不如独立思考。
分析:查看事件查看器的日志信息
打开windows 日志-> 应用程序 , 重点看错误和错误上下的信息。
信息:InnoDB: Database was not shutdown normally!
信息:InnoDB: Starting crash recovery.
信息:InnoDB: Reading tablespace information from the .ibd files
错误:InnoDB: Attempted to open a previously opened tablespace. Previous tablespace gdyuancheng_data/a uses space ID: 12 at filepath: .\gdyuancheng_data\a.ibd. Cannot open tablespace gdyuancheng_temp_data/a which uses space ID: 12 at filepath: .\gdyuancheng_temp_data\a.ibd
Database was not shutdown normally,说明很有可能是昨晚重启服务器的时候,没有正常停止MySQL服务。
InnoDB: Attempted to open a previously opened tablespace.说明数据的文件损坏了,无法打开文件,导致无法启动MySQL。
解决思路:
既然是数据库损坏了,那么具体是哪个损坏了,应该不可能全部损坏,更加有可能是损坏了mysql的这个基本数据库。找出有问题的数据库进行修复。所以我做了以下的尝试。
1. 在Data的文件夹里面建立命名为“临时文件夹”的文件夹,把Data的文件夹里面的除了mysql之外的文件夹剪切进临时文件夹,这时启动Mysql服务,这时就会发现已经启动成功了。如果发现不行,要重启服务器。启动成功之后,然后就停止服务器,将“临时文件夹”里面的文件夹剪切到Data底下。这个时候再启动服务,发现也可以启动。
这么操作的原理是,异常关机导致数据库可能出现错误,但是数据库这么多具体也不知道是哪个数据库错误。在保留mysql这个基础数据库然后启动服务器,会自动进行修复,在修复完成之后,再次把其他库文件夹放回去也就也启动服务了。其实这个方法也是在无奈的情况下试出来,当时也百度找到其他的处理方案都不生效。具体的原因并不知晓。
注意:
如果按照上面的操作还没有办法正常启动的话,先不要怀疑自己,要重启服务器试试,我一开始也是发现无济于事,后面根据我多年的经验果断的重启之后就可以了。
另外对于数据库受损的有的解决方案是通过修改my.ini配置,innodb_force_recovery = 1,但是这种方式治标不治本,建议还是使用本文的解决方式。
查找Data所在的路径的方法:在C:\Program Files\MySQL\MySQL Server 5.6\bin的文件夹的上级目录下有个my.ini的文件,文件中搜索"/data"就可以找到对应的路径。