来自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文件直接导入数据库文件
MySQL服务启动不了,报错,莫慌莫慌的,要相信一定有很多人像你一样出现各种各样的问题
方法 1 Win + R 输入 services.msc
方法 2 右键点击此电脑,选择管理,选择服务
方法 3 右键Windows任务栏,选择任务管理器,选择服务
方法 1 Win + R 输入 cmd
使用命令 netstat -ano | findstr 3306
找到占用端口的进程(PID对应的那一列)
使用命令 taskkill /pid 进程号 /F
让该进程停止运行
方法 2 右键Windows任务栏,选择任务管理器,选择详细信息,找到所有 mysql
开头的进程 ,右键结束进程
两个存放数据库文件的文件夹:
C:\Program Files\MySQL\MySQL Server 8.0\data\
C:\ProgramData\MySQL\MySQL Server 8.0\Data\
在MySQL 的 bin 目录下执行命令 mysqld --install
在同样目录下执行命令 mysqld --initialize --user=root --console
,命令执行完成会生成一个随机密码,一会用这个密码登录数据库
使用 --console
参数可以查看执行过程中的异常情况,通常都会给出明确的信息提示
我这里的错误提示是:
.......
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 文件夹
从上面的报错可知,初始化的是 MySQL80 服务的 Data 文件夹,所以启动 MySQL 80 服务,使用管理员身份在 cmd 中执行命令:
net start mysql80
或者手动在服务管理窗口中启动
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
服务和 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
服务可执行文件路径为:
"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 上看到一个问题下的回复:
我试了一下,这两个服务不能同时启动,估计是端口占用的问题吧……
目前,我还不清楚二者的关系,不过发现他们数据库文件存储的默认路径是不同的:
C:\Program Files\MySQL\MySQL Server 8.0\data
中;C:\ProgramData\MySQL\MySQL Server 8.0\Data
中。至此,我的毕设终于可以继续了 ಥ_ಥ ……