Windows更新后MySQL服务启动失败问题总结

来自2022年4月26日更新
今天启动电脑打开 Navicat 后,数据库少了好几个,然后去查了 此电脑 > 管理 > 服务,发现数据库服务程序启动的是 MySQL80 服务,将服务切换回 mysql 服务就好了……

原文:

由于 Windows 更新导致 MySQL登录各种报错
先后出现了

error 1:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
error 2:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
error 3:
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
error 4:
没有启动 mysql 服务。

请键入 NET HELPMSG 3521 以获得更多的帮助。
error 5:
mysql 服务正在启动 .
mysql 服务无法启动。

服务没有报告任何错误。

请键入 NET HELPMSG 3534 以获得更多的帮助。

于是打算总结一下自己查到的资料,希望能帮助到需要的人……

参考文章:

  • MySQL 报错:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before
  • 终极解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)
  • 解决mysql:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO/YES)
  • mysql如何将data文件直接导入数据库文件

登录报错解决过程

Step 0

MySQL服务启动不了,报错,莫慌莫慌的,要相信一定有很多人像你一样出现各种各样的问题


Step 1 停止MySQL的所有服务

方法 1 Win + R 输入 services.msc

Windows更新后MySQL服务启动失败问题总结_第1张图片 Windows更新后MySQL服务启动失败问题总结_第2张图片
Windows更新后MySQL服务启动失败问题总结_第3张图片

方法 2 右键点击此电脑,选择管理,选择服务

Windows更新后MySQL服务启动失败问题总结_第4张图片 Windows更新后MySQL服务启动失败问题总结_第5张图片
Windows更新后MySQL服务启动失败问题总结_第6张图片

方法 3 右键Windows任务栏,选择任务管理器,选择服务

Windows更新后MySQL服务启动失败问题总结_第7张图片 Windows更新后MySQL服务启动失败问题总结_第8张图片
Windows更新后MySQL服务启动失败问题总结_第9张图片

Step 2 关闭占用3306端口所有程序

方法 1 Win + R 输入 cmd

使用命令 netstat -ano | findstr 3306 找到占用端口的进程(PID对应的那一列)

使用命令 taskkill /pid 进程号 /F 让该进程停止运行

方法 2 右键Windows任务栏,选择任务管理器,选择详细信息,找到所有 mysql 开头的进程 ,右键结束进程

Windows更新后MySQL服务启动失败问题总结_第10张图片 Windows更新后MySQL服务启动失败问题总结_第11张图片
Windows更新后MySQL服务启动失败问题总结_第12张图片

Step 3 重新下载 mysql.exe,初始化等一系列操作

3.0 提前备份好数据库文件夹

两个存放数据库文件的文件夹:

C:\Program Files\MySQL\MySQL Server 8.0\data\
C:\ProgramData\MySQL\MySQL Server 8.0\Data\
3.1 下载服务器程序

在MySQL 的 bin 目录下执行命令 mysqld --install

3.2 初始化MySQL

在同样目录下执行命令 mysqld --initialize --user=root --console ,命令执行完成会生成一个随机密码,一会用这个密码登录数据库

Windows更新后MySQL服务启动失败问题总结_第13张图片

使用 --console 参数可以查看执行过程中的异常情况,通常都会给出明确的信息提示

Windows更新后MySQL服务启动失败问题总结_第14张图片

我这里的错误提示是:

.......
2022-04-19T08:02:53.490079Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
2022-04-19T08:02:53.490095Z 0 [ERROR] [MY-013236] [Server] The designated data directory C:\ProgramData\MySQL\MySQL Server 8.0\Data\ is unusable. You can remove all files that the server added to it.
......

简单翻译一下就是:

2022-04-19T08:02:53.490079Z 0 [错误] [MY-010457] [服务器] --已指定初始化,但是数据目录中存在文件。终止中。
2022-04-19T08:02:53.490095Z 0 [错误] [MY-013236] [服务器] 特定的数据目录 C:\ProgramData\MySQL\MySQL Server 8.0\Data\ 是不可用的。你可以移除所有文件以使服务器生成该文件目录。

注意 C:\ProgramData 目录为隐藏目录,指定显示隐藏目录时才可见

进入 C:\ProgramData\MySQL\MySQL Server 8.0\ 查看 Data 文件夹,里面是一些数据库文件,我已经不记得什么时候用过他们了,所以就删除了 Data 文件夹

3.3 启动 MySQL80 服务

从上面的报错可知,初始化的是 MySQL80 服务的 Data 文件夹,所以启动 MySQL 80 服务,使用管理员身份在 cmd 中执行命令:

net start mysql80

或者手动在服务管理窗口中启动

3.4 登录 MySQL
Windows更新后MySQL服务启动失败问题总结_第15张图片
3.5 更改密码

alter user ‘root’@‘localhost’ identified by ‘NEWPASSWORD’;
刷新权限 flush privileges;

这里可能会出现一些问题,因为我没有出现密码不符合规则的问题,参考:MySQL 报错:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before

至此,两个MySQL服务都可以使用了(但是不能同时使用),之前的数据库丢失问题可以通过复制数据库文件的方法恢复,参考:mysql如何将data文件直接导入数据库文件


mysql 服务

Windows更新后MySQL服务启动失败问题总结_第16张图片

mysql 服务和 MySQL80 服务的可执行文件的路径不一样,可以看到 mysql 服务可执行文件的路径为:

"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld" mysql

登录 MySQL 查看 datadir

mysql> show global variables like "%datadir%";
+---------------+-----------------------------------------------+
| Variable_name | Value                                         |
+---------------+-----------------------------------------------+
| datadir       | C:\Program Files\MySQL\MySQL Server 8.0\data\ |
+---------------+-----------------------------------------------+
1 row in set, 1 warning (0.01 sec)

MySQL80 服务

Windows更新后MySQL服务启动失败问题总结_第17张图片

MySQL80 服务可执行文件路径为:

"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" MySQL80

登录 MySQL 查看 datadir

mysql> show global variables like "%datadir%";
+---------------+-----------------------------------------------+
| Variable_name | Value                                         |
+---------------+-----------------------------------------------+
| datadir       | C:\ProgramData\MySQL\MySQL Server 8.0\Data\   |
+---------------+-----------------------------------------------+
1 row in set, 1 warning (0.00 sec)

我在 csdn 上看到一个问题下的回复:

Windows更新后MySQL服务启动失败问题总结_第18张图片

我试了一下,这两个服务不能同时启动,估计是端口占用的问题吧……

目前,我还不清楚二者的关系,不过发现他们数据库文件存储的默认路径是不同的:

  • 如果启动 mysql 服务,默认数据库文件是在 C:\Program Files\MySQL\MySQL Server 8.0\data 中;
  • 启动 MySQL80 服务,默认数据库文件是在 C:\ProgramData\MySQL\MySQL Server 8.0\Data 中。

至此,我的毕设终于可以继续了 ಥ_ಥ ……

你可能感兴趣的:(mysql)