MySQL报错:Access denied for user ‘root‘@‘localhost‘解决方法
作者:步行cgn
一、错误含义
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
这个错误表示 MySQL 拒绝了 root 用户的连接请求。关键信息:
| 部分 | 含义 |
|---|---|
ERROR 1045 | 认证失败错误码 |
root@localhost | 用 root 用户从 localhost 连接 |
using password: YES | 提供了密码,但密码不对 |
using password: NO | 没提供密码(如果显示 NO,说明 -p 后面没输入密码) |
二、常见原因
| 原因 | 说明 |
|---|---|
| 密码错误 | 输入的密码与 root 用户的实际密码不一致 |
| 密码为空 | root 用户没有设置密码,但命令中用了 -p |
| 认证插件问题 | MySQL 8 默认使用 caching_sha2_password,旧客户端不兼容 |
| 用户名错误 | 用户不是 root,或 root 不允许从 localhost 连接 |
| 端口错误 | 连接到了错误的 MySQL 实例 |
| 环境变量干扰 | MYSQL_PWD 环境变量覆盖了输入的密码 |
注意:第一条 [Warning] Using a password on the command line interface can be insecure 只是警告,不是错误。它提示你“在命令行里明文写密码不安全”,但不会影响连接。真正的问题是下面的 ERROR 1045。
三、排查步骤
1. 确认密码是否正确
mysql -u root -p
回车后输入密码。如果密码记不清了,尝试以下常见密码:
- 空密码(直接回车)
root123456- 安装 MySQL 时设置的密码
2. 确认是否真的设置了密码
有些安装方式(如 MySQL 8 的默认安装)会为 root 用户生成一个临时密码,需要查看日志:
# Linux grep 'temporary password' /var/log/mysqld.log # Windows,查看 MySQL 数据目录下的 .err 文件
3. 检查是否连接到了正确的实例
# 指定端口 mysql -u root -p -P 3306 # 指定主机 mysql -u root -p -h 127.0.0.1
如果你的机器上装了多个 MySQL 实例,可能连到了错误的那个。
4. 检查环境变量
Windows 下如果设置了 MYSQL_PWD 环境变量,它会覆盖你手动输入的密码:
echo %MYSQL_PWD%
如果有值,清掉它:
set MYSQL_PWD=
四、忘记密码怎么办
如果确实忘了 root 密码,可以跳过权限验证重置。
Windows 下重置
第一步:停止 MySQL 服务
net stop mysql
服务名可能是 mysql、mysql80、MySQL,用 services.msc 查看。
第二步:以跳过权限验证方式启动
mysqld --skip-grant-tables --console
这个命令会占用当前终端,不要关闭。
第三步:新开一个终端,连接 MySQL
mysql -u root
此时不需要密码。
第四步:重置密码
MySQL 8:
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
MySQL 5.7:
UPDATE mysql.user SET authentication_string = PASSWORD('新密码')
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
第五步:重启 MySQL 服务
关闭跳过权限验证的进程,正常启动服务:
net start mysql
用新密码连接验证。
Linux 下重置
# 停止服务 sudo systemctl stop mysqld # 跳过权限验证启动 sudo mysqld_safe --skip-grant-tables & # 连接 mysql -u root # 重置密码 FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; # 重启 sudo systemctl restart mysqld
五、认证插件问题
MySQL 8 默认使用 caching_sha2_password 插件,部分旧客户端或 JDBC 驱动不兼容,可能表现为“密码正确但认证失败”。
修改认证插件:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; FLUSH PRIVILEGES;
Java 项目中如果连接 MySQL 8 报认证错误,检查 JDBC URL 是否加了参数:
jdbc:mysql://localhost:3306/mydb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
六、权限问题
如果密码正确但仍被拒绝,可能是 root 用户没有从 localhost 连接的权限。
以跳过权限方式启动后,检查权限表:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
如果 host 不是 localhost 或 %,可以添加:
CREATE USER 'root'@'localhost' IDENTIFIED BY '密码'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
七、关于密码安全警告
[Warning] Using a password on the command line interface can be insecure.
这只是提醒:mysql -u root -p123456 这种把密码写在命令行里的方式不安全,因为命令会被记录到 shell 历史中。
推荐方式:
# 交互式输入,密码不回显 mysql -u root -p # 使用配置文件 mysql --defaults-extra-file=/path/to/my.cnf
my.cnf 内容:
[client] user=root password=你的密码
并设置文件权限:
chmod 600 /path/to/my.cnf
八、总结
| 问题 | 解决方案 |
|---|---|
| 密码错误 | 重新输入正确密码 |
| 忘记密码 | 跳过权限验证重置 |
| 密码为空 | 去掉 -p 或直接回车 |
| 认证插件不兼容 | 改为 mysql_native_password |
| 权限不足 | 检查 mysql.user 表的 host 字段 |
| 命令行密码警告 | 用交互式 -p 或配置文件 |
Access denied 的核心就是认证失败,99% 的情况是密码不对。先确认密码是否正确,再检查认证插件和权限表。忘记密码时,跳过权限验证是标准操作,重置后立即恢复正常启动。命令行密码警告不影响连接,但为了安全,建议改用交互式输入或配置文件。
到此这篇关于MySQL报错:Access denied for user ‘root‘@‘localhost‘解决方法的文章就介绍到这了,更多相关Access denied for user root @ localhost内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- Linux连接mysql报错:Access denied for user ‘root’@‘localhost’(using password: YES)的解决方法
- 解决mysql:ERROR 1045 (28000): Access denied for user ''root''@''localhost'' (using password: NO/YES)
- mysql Access denied for user ‘root’@’localhost’ (using password: YES)解决方法
- 解决mysql创建数据库后出现:Access denied for user ''root''@''%'' to database ''xxx''的问题
- mysql ERROR 1044 (42000): Access denied for user ''''@''localhost'' to database
- MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)问题的解决
- win10下MySQL 8.0登录Access denied for user‘root’@‘localhost’ (using password: YES)问题的解决方法
- 解决mysql登录错误:''Access denied for user ''root''@''localhost''
- winxp 安装MYSQL 出现Error 1045 access denied 的解决方法
- 解决mysql ERROR 1045 (28000)-- Access denied for user问题
