昨天晚上自己的网站突然打不开了,以为被人黑了。想想不应该啊,这小站不会有人关注的,于是登录服务器看了下,发现是Mysql打不开了
很奇怪,因为今天白天还是可以打开的,下班后也没有碰过服务器
首先看看是否端口被占用了
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,结果就正常了。不过肯定不建议这么做,肯定是要先备份数据的,我主要是因为懒。
至于为什么会出现这错误,我估计是我服务器自动更新重启了,导致了数据库日志损坏,所以无法启动,因为对数据库不太了解,加上错误提示都是英文,所以也没深入研究