用于搜索引擎抓取,以及给刚进来的人展示我的报错信息,解决方案在下面。
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的),问题是这样的
虽然本地的mysql里没什么重要的数据,但我自己平时练手的那些项目,数据可都在本地,没了还是很心疼的,练手的项目还有有参考价值的,所以我要将这个问题解决了!!
就这提示,也没啥具体的参考、提示信息,想解决也无从下手啊。不过我马上想到了MySQL的日志,可以去看日志嘛,emmm,不过没在本地看过mysql的日志,我也找不到日志在哪里,而且我当初安装MySQL的时候选择了默认安装,把MySQL的服务和数据分开了,目录结构更找不到了,前方无路……
这……突然,我想到了一个命令,之前用过, 可以将错误信息输出到控制台上:mysqld --console ,马上输入这个命令,果然:
note那些直接被我忽略,一眼就看到了我熟悉的ERROR,什么?数据文件“ibdata1”必须是可写入的?“ibdata1”是什么文件?哪里有,难道是权限不够吗?但是Linux下修改权限倒是好修改,要查找文件用find命令也好使,可是Windows下不好搞呀。第一次遇到这种问题,我也不敢贸然的去修改,还是先去网上查一查,看看有没有遇到相同问题的网友,参考一下他们的解决方案。
键入关键字“InnoDB: The innodb_system data file ‘ibdata1’ must be writable”,回车,果然,有好多遇到相同问题的网友,不过他们都是在Linux下,一个find命令,一个chmod命令,就完事了,这……
那好吧,我再限定一下关键字:Windows。也有先例的呀,不过我看了解决方案,也看了一些评论,好像有很多都没有解决问题。而且这解决方案也有点草率啊:
直接删除文件?太草率了。我看下面的评论,好像并没有解决问题。我又翻看了其它几篇博客,发现有好几篇都是这么说的,但是反应也不统一,有的能解决,有的不能解决。我觉得不太靠谱啊。
我又重新看了控制台的报错信息,“ibdata1”文件必须是可写入的?那我查查本机上有没有这个文件。这里给大家推荐一款Windows下非常好用的查询工具Everything,可以查询文件或者文件,在本机范围内,还可以用正则匹配。我查询了ibdata1,有四个结果
但是第三个是我之前写Python爬虫的时候装的mysql,已经没用了,还没清理,可以排除。第四个:D:/temp/ 是我放一些临时文件的地方,也可以排除。基本可以确认是前两个文件。
因为我MySQL安装的时候是默认的,所以第一个Program Files是程序安装的地方,第二个ProgramData是存放数据的地方,可能描述得不太准确,懂我意思就行。
既然找到了这两个文件,那么接下来修改这个文件的权限应该就可以了,我记得Windows下也可以对文件的读写操作等权限进行修改(的确是可以的,不经常用的操作记忆有点模糊了)。
找到对应文件,数据文件,我先来到的是第二个,也就是ProgramData里面的,
通过Everything可以快速的来到文件目录,当然,也可以一层一层的点开。
选中文件,右击,点开属性,然后在顶部的选项中选择安全,可以看到如下
这些权限全都有的啊,看起来没问题。
那我再去看看另一个,和上面同样的方法。果然有问题
只有读取和执行的权限,没有写入权限,点击编辑,这个文件添加上修改和写入的权限
我也不太清楚Windows下的用户、用户组什么的,就默认选中“所有的程序包”,添加权限就OK了。
到此基本上就OK了,但是还有一个问题,因为刚刚查看端口的时候,发现其实3306这个端口是被占用的,但是服务没启起来,有点僵尸进程的感觉。我们得先把这个进程杀死,释放出被占用的端口。
mysqld --console
netstat -aon | findstr 3306 查找3306端口
taskkill -F /pid 15688 强制杀死15688进程
net start mysql57 启动mysql57服务
当然,可能导致错误的原因和我不一样,但是可以有类似的解决思路:
自己根据实际的经验写的文章,水平有限,如有错误还请指出。另外,问题虽然解决了,但是没搞清楚问题发生的原因,Program Files里的那个Ibdata1文件我重来没有动过,之前一直都好好,怎么突然就不行了呢?