MySQL 8.0的密码被忘记了,怎么重置修改?

目录

遇到问题:

解决问题:

[一、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 窗口中无密码登录,原来的不关闭

  1. 新的 CMD 窗口中(同样管理员身份进入 bin 目录:

    bash 复制代码
    cd C:\Program Files\MySQL\MySQL Server 8.0\bin
  2. 执行无密码登录:

    复制代码
    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 之类):

    登录后先执行:

    sql 复制代码
    SET GLOBAL validate_password.policy = LOW;
    SET GLOBAL validate_password.length = 4;

    然后再执行修改密码的命令。

修改完成后,恢复正常启动
  1. 回到第一个卡住的 CMD 窗口 ,按 Ctrl + C 终止 mysqld 进程。

  2. 执行以下命令,正常启动 MySQL 服务(因为环境变量已配,直接输入):

    bash 复制代码
    net start MySQL80
  3. 测试新密码:

    bash 复制代码
    mysql -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 内部,直接在命令提示符中执行(前提是你的环境变量已配好):

sql 复制代码
mysqladmin -u root -p password "你的新密码"
  • 执行后,系统会提示 Enter password:,此时输入你的旧密码(原密码)

  • 如果旧密码正确,密码会立即被修改为新密码。


方法二:登录 MySQL 后修改(标准 SQL 方式)

  1. 先用旧密码登录 MySQL:

    sql 复制代码
    mysql -u root -p

    输入旧密码进入 mysql> 命令行。

  2. 根据你的 MySQL 版本,执行对应的命令(你的是 8.0,用第一种):

    如果是 MySQL 8.0+:

    sql 复制代码
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';

    如果是 MySQL 5.7 或更早版本(备用):

    sql 复制代码
    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');
  3. 执行成功后,输入 exit; 退出。

------------------结束---------------

相关推荐
动恰客流统计1 小时前
客流统计如何结合AI分析?从传统计数到智能决策的技术升级路径
数据库·人工智能·边缘计算
宠友信息2 小时前
多端数据互通场景下Spring Boot仿小红书源码结构设计
数据库·spring boot·redis·缓存·架构
风曦Kisaki2 小时前
#Linux数据库管理Day06:主从同步与MaxScale读写分离
linux·运维·数据库
影寂ldy2 小时前
C# try-catch 异常处理全套笔记
服务器·数据库·c#
长不胖的路人甲3 小时前
Redis 缓存的数据持久化方案讲解
数据库·redis·缓存
长不胖的路人甲3 小时前
Redis 单线程为什么速度很快
数据库·redis·缓存
韩楚风3 小时前
【参天引擎】Cantian 服务端框架全景解析:进程架构、模块组成与交互关系
数据库·mysql·架构·cantian
Listen·Rain3 小时前
数据库流式查询
java·数据库
雨辰AI3 小时前
生产级实战:人大金仓 V9 标准化运维手册(日常巡检 + 监控告警 + 应急处置)
java·运维·数据库·后端