Error: MySQL shutdown unexpectedly.<br>
This may be due to a blocked port, missing dependencies
这一行就是我问题的开始。
原因是因为,之前一直使用xampp用作本地mysql的启动管理,是个很好用的工具,但是近日想要给一个项目配置本地mysql库的信息,发现密码忘记了,我就在config的my.ini文件中添加了些跳过密码的配置信息
但是添加到一半找到了密码,于是在文件中删除添加的信息后重启了mysql,这时候遇到问题了,xampp显示启动成功,如上图,但是数据库连接报错如下:
不一会xampp报出一个mysql意外终止的错误如下:
2:56:41 PM [mysql] Error: MySQL shutdown unexpectedly.<br>
2:56:41 PM [mysql] This may be due to a blocked port, missing dependencies, <br>
2:56:41 PM [mysql] improper privileges, a crash, or a shutdown by another method.<br>
2:56:41 PM [mysql] Press the Logs button to view error logs and check<br>
2:56:41 PM [mysql] the Windows Event Viewer for more clues<br>
2:56:41 PM [mysql] If you need more help, copy and post this<br>
2:56:41 PM [mysql] entire log window on the forums<br>
根据当前信息提示;blocked port,看起来是端口占用了,但是我查看了下本机端口使用情况,3306并没有被占用,查看log日志,也没有报错都是note:
于是我便开始了为期2天的解决之路。
最终我终于解决了问题,过程很坎坷!!!
我先大致总结了下网上常见的解决办法,但是对我来说一点没用,大家可以看看是不是准备这么做或者也这么做过了:
1.修改my.ini文件,将其中的端口改为3307或者其他,同时config中也将mysql的端口3306修改掉
2.在mysql的my.ini中修改配置项,在[mysqld]中添加一系列的属性,或者在innodb_data_XX等属性后面添加一系列属性
3.删除xampp目录下的mysql下data目录中的ib_logfile0,ib_logfile1文件,并重启,再多次删除,多次重启
4.各种修改注册列表,改电脑中mysql配置文件的操作等等
5.重装xampp.重新配置
以上是网上常见的方法不能说没用,对我这个情况来说是没用的,下面开始总结我成功的方法---------------------------------------------------------------------------------------------:
1.定位异常
找到本地xampp的文件夹,这个不要找错了。找到其中mysql目录,进入后找到data文件夹,这时我发现,我的data文件夹中有了些异常文件:
我这个文件夹中有几千个新生成的master开头的info文件,目前我不知道这些的作用,能看出来是随着启动次数而增加的。大伙可以看看是不是也有这个情况,如果没有,我的经验不一定适用了。
2.重要文件备份
在这个xampp->mysql->data文件夹中,有个ibdata1文件,这个至关重要,这里面存贮的是现有每个数据库中的数据信息,表名数据一类的,要把这个文件保护好,可以备份一个,我的做法是把data文件夹整个备份了一下,后面的经验来看,也是备份整个data文件夹是最保险的因为涉及到文件的替换。
3.将之前所有修改的配置文件全部恢复,不添加任务东西
4.删除文件
选中ib_logfile0,ib_logfile1,以及所有的这些matser开头的info文件,全部删除(我的有4000份左右)。我当时连ibdata1都干掉了,这些文件是会在运行时重新生成的。注意这里的ib_logfile0,ib_logfile1文件,这时候我是删掉了(后面的经验来看,应该可以不删,只删除这些master开头的文件就行,在遇到类似的问题可以试下),后面还需要替换回来。
5.xampp中重启mysql,去数据库中尝试连接,最终成功。
注意事项:
因为我当时连ibdata1文件都干掉了,所以连上库后发现只有库名了,库里的数据都没了,还好我备份了这个文件,复制回来把新生成的ibdata1替换掉,数据就都恢复了。xampp也没有再出现shutdown unexpectedly的现象。
但是这时查看日志,会有大面积的error:
原因是ib_logfile0和ib_logfile1是mysql用来存储操作执行的日志文件,用于事务暂存和回滚。 这时候文件是自动生成的不是原来的文件,我只把ibdata1替换回来,没有替换这两个,我便把原来我备份的这两个文件,重新替换回来,再启动,就不再报错了。
因为是摸索的进行修复的,ibdata1和ib_logfile0和ib_logfile1可能不需要删除是我多做了,再有这个情况时候可以试下,但是总算解决了问题还是不容易的。