Windows下mysql服务无法启动:服务没有报告任何错误。

用于搜索引擎抓取,以及给刚进来的人展示我的报错信息,解决方案在下面。

MySQL57 服务正在启动 .
MySQL57 服务无法启动。
服务没有报告任何错误。
请键入 NET HELPMSG 3534 以获得更多的帮助。
2020-12-15T00:39:28.143958Z 0 [ERROR] InnoDB: The innodb_system data file ‘ibdata1’ must be writable
2020-12-15T00:39:28.143958Z 0 [ERROR] InnoDB: The innodb_system data file ‘ibdata1’ must be writable
2020-12-15T00:39:28.144910Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2020-12-15T00:39:28.346376Z 0 [ERROR] Plugin ‘InnoDB’ init function returned error.
2020-12-15T00:39:28.346376Z 0 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
2020-12-15T00:39:28.347368Z 0 [ERROR] Failed to initialize plugins.
2020-12-15T00:39:28.348370Z 0 [ERROR] Aborting

前言

本地一直好好的MySQL突然出问题了(我的机器是Windows的),问题是这样的
Windows下mysql服务无法启动:服务没有报告任何错误。_第1张图片
虽然本地的mysql里没什么重要的数据,但我自己平时练手的那些项目,数据可都在本地,没了还是很心疼的,练手的项目还有有参考价值的,所以我要将这个问题解决了!!

着手分析

就这提示,也没啥具体的参考、提示信息,想解决也无从下手啊。不过我马上想到了MySQL的日志,可以去看日志嘛,emmm,不过没在本地看过mysql的日志,我也找不到日志在哪里,而且我当初安装MySQL的时候选择了默认安装,把MySQL的服务和数据分开了,目录结构更找不到了,前方无路……

我查询3306端口,端口是被占用的,但是服务没启动起来?
Windows下mysql服务无法启动:服务没有报告任何错误。_第2张图片

这……突然,我想到了一个命令,之前用过, 可以将错误信息输出到控制台上:mysqld --console ,马上输入这个命令,果然:
Windows下mysql服务无法启动:服务没有报告任何错误。_第3张图片
note那些直接被我忽略,一眼就看到了我熟悉的ERROR,什么?数据文件“ibdata1”必须是可写入的?“ibdata1”是什么文件?哪里有,难道是权限不够吗?但是Linux下修改权限倒是好修改,要查找文件用find命令也好使,可是Windows下不好搞呀。第一次遇到这种问题,我也不敢贸然的去修改,还是先去网上查一查,看看有没有遇到相同问题的网友,参考一下他们的解决方案。

键入关键字“InnoDB: The innodb_system data file ‘ibdata1’ must be writable”,回车,果然,有好多遇到相同问题的网友,不过他们都是在Linux下,一个find命令,一个chmod命令,就完事了,这……

那好吧,我再限定一下关键字:Windows。也有先例的呀,不过我看了解决方案,也看了一些评论,好像有很多都没有解决问题。而且这解决方案也有点草率啊:
Windows下mysql服务无法启动:服务没有报告任何错误。_第4张图片
直接删除文件?太草率了。我看下面的评论,好像并没有解决问题。我又翻看了其它几篇博客,发现有好几篇都是这么说的,但是反应也不统一,有的能解决,有的不能解决。我觉得不太靠谱啊。

定位问题

我又重新看了控制台的报错信息,“ibdata1”文件必须是可写入的?那我查查本机上有没有这个文件。这里给大家推荐一款Windows下非常好用的查询工具Everything,可以查询文件或者文件,在本机范围内,还可以用正则匹配。我查询了ibdata1,有四个结果
Windows下mysql服务无法启动:服务没有报告任何错误。_第5张图片
但是第三个是我之前写Python爬虫的时候装的mysql,已经没用了,还没清理,可以排除。第四个:D:/temp/ 是我放一些临时文件的地方,也可以排除。基本可以确认是前两个文件。

因为我MySQL安装的时候是默认的,所以第一个Program Files是程序安装的地方,第二个ProgramData是存放数据的地方,可能描述得不太准确,懂我意思就行。

解决问题

既然找到了这两个文件,那么接下来修改这个文件的权限应该就可以了,我记得Windows下也可以对文件的读写操作等权限进行修改(的确是可以的,不经常用的操作记忆有点模糊了)。

找到对应文件,数据文件,我先来到的是第二个,也就是ProgramData里面的,
Windows下mysql服务无法启动:服务没有报告任何错误。_第6张图片
通过Everything可以快速的来到文件目录,当然,也可以一层一层的点开。

选中文件,右击,点开属性,然后在顶部的选项中选择安全,可以看到如下
Windows下mysql服务无法启动:服务没有报告任何错误。_第7张图片
这些权限全都有的啊,看起来没问题。

那我再去看看另一个,和上面同样的方法。果然有问题
Windows下mysql服务无法启动:服务没有报告任何错误。_第8张图片
只有读取和执行的权限,没有写入权限,点击编辑,这个文件添加上修改和写入的权限
Windows下mysql服务无法启动:服务没有报告任何错误。_第9张图片
我也不太清楚Windows下的用户、用户组什么的,就默认选中“所有的程序包”,添加权限就OK了。

到此基本上就OK了,但是还有一个问题,因为刚刚查看端口的时候,发现其实3306这个端口是被占用的,但是服务没启起来,有点僵尸进程的感觉。我们得先把这个进程杀死,释放出被占用的端口。
Windows下mysql服务无法启动:服务没有报告任何错误。_第10张图片

  • netstat -aon | findstr 3306 查找3306端口,最后面那个数字就是进程号
  • taskkill -F /pid 15688 强制杀死15688进程

然后再重新启动服务就OK了
Windows下mysql服务无法启动:服务没有报告任何错误。_第11张图片

整理步骤

  1. 使用控制台查看报错信息
mysqld --console
  1. 找到对应的文件,赋予权限
  2. 查找占用端口的进程并杀死
netstat -aon | findstr 3306   查找3306端口
taskkill -F /pid 15688  强制杀死15688进程
  1. 重新启动MySQL服务
net start mysql57 启动mysql57服务

归纳总结

当然,可能导致错误的原因和我不一样,但是可以有类似的解决思路:

  1. 使用mysqld --console将错误信息输出到控制台。
  2. 根据报错信息在网上查询
  3. 参考别人解决方案,根据自己经验,解决问题

写在最后

自己根据实际的经验写的文章,水平有限,如有错误还请指出。另外,问题虽然解决了,但是没搞清楚问题发生的原因,Program Files里的那个Ibdata1文件我重来没有动过,之前一直都好好,怎么突然就不行了呢?

你可能感兴趣的:(MySQL,mysql,数据库)