xampp运行MySQL shutdown unexpectedly解决方案

时间:2022-10-26 08:48:14

昨天晚上自己的网站突然打不开了,以为被人黑了。想想不应该啊,这小站不会有人关注的,于是登录服务器看了下,发现是Mysql打不开了

xampp运行MySQL shutdown unexpectedly解决方案

很奇怪,因为今天白天还是可以打开的,下班后也没有碰过服务器

首先看看是否端口被占用了

netstat -aon|findstr "49157"

或者使用xampp的netstat功能查看,结果没有被占用

开始百度找答案,解决方法是五花八门,煎熬了一段时间终于找到了适合的方法

打开mysql的配置文件my.ini,在mysql安装目录的bin目录中

[mysqld]
      。
      。
      。
innodb_force_recovery = 4

这个后面的数值可以是0-6,以下这个设置的功能

作为一个安全措施,InnoDB 在innodb_force_recovery大于0时阻止INSERT,UPDATE或DELETE操作。对于MySQL5.6.15,将innodb_force_recovery设为4或更高会让InnoDB处于只读模式。

1 (SRV_FORCE_IGNORE_CORRUPT)

即使服务器检测到损坏的页仍让它运行。试图使SELECT* FROM tbl_name跳过损坏的索引记录和页,这样有助于转储表。

 2 (SRV_FORCE_NO_BACKGROUND)

阻止主线程和任何清除线程的运行。如果崩溃会在清除操作中发生,该恢复值会阻止它。

 3 (SRV_FORCE_NO_TRX_UNDO)

不要在崩溃恢复后运行事务回滚。

 4 (SRV_FORCE_NO_IBUF_MERGE)

阻止插入缓冲合并操作。如果它们会导致崩溃,不要做这些。不计算表统计。这个值可以永久损坏数据文件。使用这个值后,准备号删除并重建所有辅助索引。在MySQL5.6.15中,设置InnoDB为只读。

 5 (SRV_FORCE_NO_UNDO_LOG_SCAN)

在启动数据库时不查看撤消日志:InnoDB将即使未完成的事务也作为已提交。这个值可以永久损坏数据文件。在MySQL5.6.15中,设置InnoDB为只读。

 6 (SRV_FORCE_NO_LOG_REDO)

不要通过恢复对重做日志进行前滚。这个值可能永久损坏数据文件。数据库页被留在一个陈旧的状态,这反过来又可能带给B-trees和其它数据库结构更多的损坏。在MySQL5.6.15中,设置InnoDB为只读。

我直接设置了数值为4,再次启动mysql,终于成功启动,打开网站,发现网站上很多东西都没有了,再次找解决方案,意思是修改数值后,需要对数据做逻辑导出,再修改数值为0

innodb_force_recovery = 0

重启sql服务,导入之前导入的数据即可

看到这,我觉的麻烦,就先关掉mysql,直接将数值改为0,再打开mysql,结果就正常了。不过肯定不建议这么做,肯定是要先备份数据的,我主要是因为懒。

至于为什么会出现这错误,我估计是我服务器自动更新重启了,导致了数据库日志损坏,所以无法启动,因为对数据库不太了解,加上错误提示都是英文,所以也没深入研究