You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MySQL 8.0+下root用户登录异常求助:重置密码后仍提示无密码访问被拒

解决MySQL 8.0+重置root密码后登录失败(Access denied with using password: NO)的问题

这个问题我之前帮同事排查过,在MySQL 8.0+里太常见了——核心原因是你用了旧版本的密码重置命令,再加上8.0对认证机制做了大改动,才导致登录失败。咱们一步步来解决:

为什么你的操作会出错?

  • PASSWORD()函数已被彻底移除:MySQL 8.0+淘汰了旧的PASSWORD()加密函数,默认改用caching_sha2_password作为认证插件。你用UPDATE set authentication_string=PASSWORD("password")这条语句,不仅不会生成正确的密码哈希,还可能把authentication_string字段搞成无效值。
  • 登录命令的潜在格式问题:如果你的登录命令写成mysql -u root -p password(注意-p和密码之间有空格),MySQL会把password当成要连接的数据库名,而非密码,这时候就会抛出using password: NO的错误。不过看你描述是-ppassword,那主要问题还是密码重置的方式不对。

正确的密码重置步骤

1. 停止MySQL服务

先把正在运行的MySQL服务停掉:

  • Linux/macOS:执行 sudo systemctl stop mysql
  • Windows:在「服务」面板里找到MySQL服务停止,或者用命令行执行 net stop mysql

2. 跳过权限验证启动MySQL

启动时加上跳过权限表的参数,这样无需密码就能登录:

  • Linux/macOS:sudo mysqld_safe --skip-grant-tables &
  • Windows:进入MySQL的bin目录(比如C:\Program Files\MySQL\MySQL Server 8.0\bin),打开命令提示符执行 mysqld --skip-grant-tables

3. 无密码登录MySQL

打开新的终端/命令提示符,执行:

mysql -u root

这时候应该能顺利进入MySQL控制台。

4. 重置root密码(推荐用ALTER USER命令)

MySQL 8.0+推荐用ALTER USER来修改密码,比UPDATE更安全可靠:

  1. 先切换到mysql系统数据库:
USE mysql;
  1. 如果执行修改命令时提示ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement,先刷新权限:
FLUSH PRIVILEGES;
  1. 执行修改密码的命令(把your_new_password换成你要设置的密码):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';

要是你非要用UPDATE语句,记得不能用PASSWORD(),得用SHA2生成符合要求的哈希:

USE mysql;
UPDATE user SET authentication_string = SHA2('your_new_password', 256) WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

5. 重启服务并验证登录

先停止当前跳过权限的MySQL进程,再正常启动服务:

  • Linux/macOS:sudo systemctl restart mysql
  • Windows:net start mysql

然后用正确的命令登录:

mysql -u root -pyour_new_password

或者更安全的方式,分开输入密码:

mysql -u root -p

然后按提示输入密码,这时候就能正常登录了。

内容的提问来源于stack exchange,提问作者Shivani Singhal

火山引擎 最新活动