目录
[一、CMD 管理员 执行 停止对应的服务](#一、CMD 管理员 执行 停止对应的服务)
[二、新开一个 新的CMD 窗口中无密码登录,原来的不关闭](#二、新开一个 新的CMD 窗口中无密码登录,原来的不关闭)
[如果执行 net start MySQL80 时提示服务已启动,可以先停止再启动:](#如果执行 net start MySQL80 时提示服务已启动,可以先停止再启动:)
[方法一:直接在 CMD 命令行中修改](#方法一:直接在 CMD 命令行中修改)
[方法二:登录 MySQL 后修改(标准 SQL 方式)](#方法二:登录 MySQL 后修改(标准 SQL 方式))
------------------结束--------------
遇到问题:
突然发现密码登录不进去了,以前设置的都忘记了,并且选择了保存密码,会把这个密码文件存在本地里面,我还用了反解密的方法,拿到了以前设置的密码为ROOT123,但是呢,输入还是不行报错了,如图:


解决问题:
我用的是mySQL8.0,先停止服务。
这里我配置了全局的环境变量,就不用找到cd到他的文件bin目录下了

一、CMD 管理员 执行 停止对应的服务
net stop MySQL80
然后需要执行跳过权限模式
mysqld --skip-grant-tables --shared-memory
报错了:
Can't create test file C:\Program Files\MySQL\MySQL Server 8.0\data\mysqld_tmp_file_case_insensitive_test.lower-test
Failed to set datadir to 'C:\Program Files\MySQL\MySQL Server 8.0\data\' (OS errno: 2 - No such file or directory)
错误是因为 MySQL 找不到默认的数据目录data。数据目录通常不在Program Files下,而是在ProgramData这个隐藏文件夹里。我们需要先找到正确的路径,再启动跳过权限检查的服务。而我现在在
Program Files下,那是程序文件,数据不在那。需要明确指定正确的
datadir。可以使用--datadir参数。此外,还可能因为权限问题无法写文件,但先解决目录错误。
在上面的CMD 窗口(管理员身份)中,执行以下命令(把路径换成你找到的):
bash
mysqld --skip-grant-tables --shared-memory --datadir="C:\ProgramData\MySQL\MySQL Server 8.0\Data"
注意 :如果路径中有空格,一定要用双引号括起来。
执行后窗口会卡住不动(正常现象),保持打开,不要关闭。
如果还是报错(比如权限问题),可以尝试加上 --console 参数查看更详细的日志,但通常指定正确的 datadir 就能解决。
效果如下图:

二、新开一个 新的CMD 窗口中无密码登录,原来的不关闭
-
新的 CMD 窗口中(同样管理员身份进入 bin 目录:
bashcd C:\Program Files\MySQL\MySQL Server 8.0\bin -
执行无密码登录:
mysql -u root此时应该能成功连接,不会再有
10061错误。恭喜你,已经成功免密登录进 MySQL 了!
重置密码
登录后,执行:
bash
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
但是报错了,现在遇到的**ERROR 1290** 是因为在 --skip-grant-tables 模式下,权限表还没加载,所以 不能直接执行 ALTER USER。解决办法很简单------先刷新权限表,让 MySQL 加载权限,然后再改密。
4. 先执行:
bash
flush privileges;
再重新设置密码:
bash
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
若密码策略太严格,可以临时修改策略:
执行时提示
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements,说明密码太简单了。
临时降低策略 (如果你非要设
123456之类):登录后先执行:
sqlSET GLOBAL validate_password.policy = LOW; SET GLOBAL validate_password.length = 4;然后再执行修改密码的命令。

修改完成后,恢复正常启动
-
回到第一个卡住的 CMD 窗口 ,按
Ctrl + C终止mysqld进程。 -
执行以下命令,正常启动 MySQL 服务(因为环境变量已配,直接输入):
bashnet start MySQL80 -
测试新密码:
bashmysql -u root -p输入你刚设置的新密码,应该能正常登录了。
如果执行 net start MySQL80 时提示服务已启动,可以先停止再启动:
bash
net stop MySQL80
net start MySQL80
效果图如下: 
我的操作中:
前后操作的服务名不一致:之前停止的是
MySQL80,但启动时却用的是mysql(没有 80)。
net stop MySQL80停止的是 MySQL 8.0 的服务。
net start mysql启动的是另一个 MySQL 服务(可能是 5.7 或 MariaDB,或安装的其他版本)。这两个服务的数据目录不同,密码互不通用 。我修改密码是针对
MySQL80的 root,但我现在启动的是mysql服务,自然用123456登录不了。
测试连接:
其他:
如果需要修改密码:
前提是需要知道以前的密码
方法一:直接在 CMD 命令行中修改
不需要进入 MySQL 内部,直接在命令提示符中执行(前提是你的环境变量已配好):
sqlmysqladmin -u root -p password "你的新密码"
执行后,系统会提示
Enter password:,此时输入你的旧密码(原密码)。如果旧密码正确,密码会立即被修改为新密码。
方法二:登录 MySQL 后修改(标准 SQL 方式)
先用旧密码登录 MySQL:
sqlmysql -u root -p输入旧密码进入
mysql>命令行。根据你的 MySQL 版本,执行对应的命令(你的是 8.0,用第一种):
如果是 MySQL 8.0+:
sqlALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';如果是 MySQL 5.7 或更早版本(备用):
sqlSET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');执行成功后,输入
exit;退出。


