最直接验证MySQL root密码是否正确的方法是执行mysql -u root -p命令尝试登录:若密码正确则进入mysql>提示符,若错误则返回ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)。

确认 root 用户密码是否正确
报错中明确写着 (using password: YES),说明客户端确实传了密码,但 MySQL 拒绝了——最常见原因就是密码输错或已过期。别急着改配置,先验证这点:
- 如果用的是命令行,注意
mysql -u root -p后回车再输密码,避免把密码直接写在命令里(会留痕且易被误读空格) - 如果密码含特殊字符(如
$、!、&),shell 可能提前解析,建议用单引号包裹:mysql -u root -p'p@ss!2026' - MySQL 8.0+ 默认不支持
PASSWORD()函数,若之前用它设过密码,现在登录会失败;应改用ALTER USER重置
检查 root@'localhost' 是否真有这条记录
MySQL 认证是“用户名 + 主机名”组合匹配,'root'@'localhost' 和 'root'@'127.0.0.1' 是两条独立用户。执行以下语句前需先用其他账号(如 admin)或跳过权限模式登录:
-
SELECT host, user, authentication_string FROM mysql.user WHERE user = 'root';—— 看输出里有没有localhost这一行 - 如果没有,只有
127.0.0.1或%,那mysql -u root -h localhost就必然失败(因为localhost触发 Unix socket 连接,只认host='localhost'的记录) - 补一条:
CREATE USER 'root'@'localhost' IDENTIFIED BY 'your_new_pass'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
区分 localhost 和 127.0.0.1 的连接行为
这是最容易忽略的坑:MySQL 对 localhost 特殊处理,强制走 socket 文件,不走 TCP;而 127.0.0.1 明确走 TCP 回环。即使你只建了 'root'@'127.0.0.1',用 -h localhost 也连不上。
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
- 临时绕过:改用
mysql -u root -h 127.0.0.1 -p测试,能连上说明问题出在localhost记录缺失或 socket 路径不对 - 查 socket 路径:
mysql --help | grep "socket",确保/var/run/mysqld/mysqld.sock(Linux)或C:\ProgramData\MySQL\MySQL Server X.X\mysql.sock(Windows)存在且权限可读 - 不想折腾主机名?统一用
-h 127.0.0.1,并确保该 host 下的root用户有密码和权限
MySQL 8.0+ 的 caching_sha2_password 兼容性问题
如果你用老版本客户端(如 Navicat 旧版、某些 Python MySQL 驱动)、或者没装 OpenSSL,caching_sha2_password 插件会导致认证失败,错误仍报 1045,但实际是握手阶段就断了。
- 登录后执行:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';—— 若plugin是caching_sha2_password,且你无法升级客户端,就换回兼容插件 - 切换命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_pass'; - 改完务必执行
FLUSH PRIVILEGES;,否则不生效
真正卡住的地方往往不是密码本身,而是你默认认为“localhost 就等于本机”,而 MySQL 把它当做一个需要显式授权的 host 名;还有就是 MySQL 8.0 的插件变更,不报具体原因,只甩一个 1045。










