Error 1045是MySQL认证阶段明确拒绝登录,非网络或配置问题;关键看报错后缀:(using password: YES)说明密码校验失败,(using password: NO)说明未传密码,二者处理路径完全不同。

直接说结论:Error 1045 不是网络不通、不是驱动版本错、也不是应用配置漏了参数,而是 MySQL 在认证阶段明确拒绝了登录请求。关键看报错末尾的 (using password: YES) 或 (using password: NO) ——它决定了你该修密码,还是该修权限表。
看懂报错后缀才能分清问题类型
MySQL 的 1045 错误严格分两类,处理路径完全不同:
-
Access denied for user 'root'@'localhost' (using password: YES):密码已发送,但校验失败 → 密码错、插件不兼容、或账号被锁 -
Access denied for user 'root'@'%' to database 'myapp'(无using password后缀):登录成功,但访问库时被拒 → 授权缺失,不是密码问题
很多人卡在第二类上反复重置密码,其实根本不需要动密码。先复制完整报错,盯住最后几个字符再动手。
Windows 下 root@localhost 密码错的快速修复
Windows 环境下最常见的是重装后没设密、或初始随机密码没记录。别急着改配置,按顺序执行:
- 用管理员权限打开 CMD,停服务:
net stop mysql80(服务名以services.msc中实际为准) - 手动跳过权限表启动:
mysqld --skip-grant-tables --shared-memory(路径需 cd 到bin目录下) - 新开一个 CMD,直接连:
mysql -u root(此时无需密码) - 执行重置(MySQL 8.0+ 必须用
ALTER USER):ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass123'; FLUSH PRIVILEGES; - 关掉 mysqld 进程,正常启动服务:
net start mysql80
注意:--shared-memory 是 Windows 必加参数,否则 --skip-grant-tables 可能不生效;FLUSH PRIVILEGES 不可省,否则新密码不加载。
MySQL 8.0+ 认证插件不兼容导致的 1045
MySQL 8.0 默认用 caching_sha2_password,但 Navicat 旧版、某些 Spring Boot 驱动(如 mysql-connector-java 5.x)、甚至部分 PHP PDO 默认不支持。现象就是:密码没错,但始终报 (using password: YES) 拒绝。
- 进 MySQL 后查当前插件:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; - 强制切回兼容插件:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpass'; - 如果要支持远程连接,还得同步改
'root'@'%'条目,并确认bind-address在my.ini里没锁死为127.0.0.1
改完必须 FLUSH PRIVILEGES,且客户端要重启(Navicat 尤其要完全退出再开,缓存插件类型)。
root@'%' 登录成功但进不了库的典型场景
这个最容易被当成密码问题来折腾。其实只要报错里没出现 using password,就说明 root 已经连上了,只是没被授权访问目标库。
- 先确认用户是否存在且 host 匹配:
SELECT host, user FROM mysql.user WHERE user = 'root';—— 如果只有'localhost'没有'%',那远程连接根本连不上,不会走到“进库”这步 - 检查具体库权限:
SHOW GRANTS FOR 'root'@'%';—— 如果输出里没有ON `myapp`.*或类似语句,就是授权缺失 - 补授权(谨慎!):
GRANT ALL PRIVILEGES ON myapp.* TO 'root'@'%'; FLUSH PRIVILEGES; - 如果应用用的是
jdbc:mysql://127.0.0.1:3306/...,注意127.0.0.1走 TCP,匹配的是'root'@'127.0.0.1'或'root'@'%',不是'root'@'localhost'(后者走 socket)
真正麻烦的是混合环境:本地开发用 localhost,测试服用 127.0.0.1,CI 流水线又用容器 IP —— 得确保对应 host 条目都存在且权限一致,否则同一套配置在不同环境表现不一。


















