解决MySQL服务无法启动,重置root用户密码

刚入门学习MySQL,本来一切操作都挺正常的,之后想用Navicat连接MySQL时,根据****里面某篇文章操作,结果开始了解决完一个bug又出现另一个bug的绝望循环。一开始是报 Access denied for user ‘root’@‘localhost’ (using password: YES) 这个错误的,后面又根据某篇文章操作导致MySQL服务无法启动。
我使用的是mysql版本是 MySQL8.0.17.0,电脑是win10系统。

前提(注意事项)

1. 配置好环境变量,在系统变量Path里面添加C:\Program Files\MySQL\MySQL Server 8.0\bin;(我的MySQL安装目录在C盘)。
2. 以管理员身份运行命令提示符。
3. 若出现这个错误:ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061),进入bin文件夹,cd C:\Program Files\MySQL\MySQL Server 8.0\bin,输入命令:mysqld --install。需要删除mysqld时输入命令:mysqld --remove
解决MySQL服务无法启动,重置root用户密码
4. 很重要的一点!。我的MySQL安装目录,也就是C:\Program Files\MySQL里面是没有my.ini这个配置文件的,而这个配置文件放在C盘下隐藏的文件夹ProgramData中,路径为:C:\ProgramData\MySQL\MySQL Server 8.0\,你需要把这个配置文件复制到 C:\Program Files\MySQL\MySQL Server 8.0\ 目录下。

一.MySQL服务无法启动

输入命令net start mysql,但是结果是MySQL服务无法启动。

第一种情况

解决MySQL服务无法启动,重置root用户密码
提取关键信息,意思是没有存放数据库数据的data文件夹。也就是说需要在C:\Program Files\MySQL\MySQL Server 8.0\目录下创建一个名为data的文件夹。但是不能自己手动创建
方法: 首先修改my.ini配置文件里面的datadir路径datadir=C:/Program Files/MySQL/MySQL Server 8.0/data;然后在命令行窗口输入命令:mysqld --initialize --user=mysql --console
 
我是使用这个方法初始化的,网上也有其他大同小异的做法。接下来你可能服务成功启动了,而运气不好的人(比如我)还是无法启动,但是仔细看报错,报错信息已经改变了。
ps. 查看控制台信息的方法是输入命令:mysqld --console
 

第二种情况

解决MySQL服务无法启动,重置root用户密码
提取关键信息,意思是数据库端口号被其他进程占用了。可能是我们刚刚启动或初始化多次,之前的进程还占用着这个端口号。
方法: 关闭占用这个端口号的进程。https://jingyan.baidu.com/article/86112f13a934f92737978787.html。根据这个链接里面的方法就能解决。
此时,可能你已经能成功启动了,我也成功了,但是之后又根据某篇文章,出现了另一个错误。
 

第三种情况

解决MySQL服务无法启动,重置root用户密码
这个有点难解释。
方法: 1、打开任务管理器终止mysqld进程; 2、打开mysql安装目录的data文件夹,删除以下2个文件:ib_logfile0ib_logfile1。具体解决参考https://blog.****.net/u012465296/article/details/71157286
 

第四种情况

解决MySQL服务无法启动,重置root用户密码
这种情况的出现是和在下面修改root密码的情景下出现的。
方法: 在配置文件my.ini 中加入一句:shared-memory。具体我是加在skip-grant-tables这句话下面。下面会讲到。
 
总结: 其实出现MySQL服务无法启动这种情况,主要是看看报错信息,具体情况具体分析。
 

二.无权限修改root密码

上面提到过,输入密码时报错: Access denied for user ‘root’@‘localhost’ (using password: YES) ;而不输入密码时,又报错Access denied for user ‘root’@‘localhost’ (using password: NO)。要想重置密码,需要先登录MySQL服务端,再进行重置密码操作。
方法: 在配置文件my.ini [mysqld]下加入两句话:skip-grant-tablesshared-memory。跳过权限表的认证。解决MySQL服务无法启动,重置root用户密码
然后再次登录,登录时不需要输入密码,直接回车跳过。解决MySQL服务无法启动,重置root用户密码
下一步输入命令:use mysql
然后输入命令:FLUSH PRIVILEGES; 刷新权限。
然后开始输入修改密码命令。尝试过几篇文章的修改密码语句都不太行,最后终于找到能成功修改密码的语法:ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; 句中’123456’即为新的密码。
 
最后删除my.ini 文件下加入的跳过权限认证的那两句话,再重新登录一次mysql,输入重置后的密码即可验证。

那么到这里就跳出坑了,遇到问题时,上网多找找答案,会找到解决办法的。