这不是密码输错,而是caching_sha2_password插件拒绝旧mysql_native_password哈希格式,报错er_not_supported_auth_mode;需先查user表确认plugin和authentication_string格式,再用alter user带by重置密码并flush privileges。

这不是密码输错了,而是 MySQL 8.0 根本不认你旧版本存的密码哈希格式——caching_sha2_password 插件对老式 mysql_native_password 哈希值直接拒绝握手,报错 ER_NOT_SUPPORTED_AUTH_MODE 或 Client does not support authentication protocol。
怎么确认是哈希格式不匹配,不是密码输错
别急着重置密码,先验证是不是认证协议卡住了:
- 用能连上的方式(比如
mysql -u root -p)登录 MySQL 命令行 - 执行
SELECT user, host, plugin, authentication_string FROM mysql.user WHERE user = 'your_username'; - 如果
plugin是caching_sha2_password,且authentication_string看起来像旧版十六进制哈希(如以*开头、长度 41 字符),那基本就是哈希不兼容 -
SHOW GRANTS能查出来 ≠ 能连上——权限没问题,但握手阶段就被拦在门外
ALTER USER 必须带 BY 密码,否则用户锁死
只写 IDENTIFIED WITH mysql_native_password 不行,MySQL 8.0 会清空原密码字段,导致账户无法登录:
- 正确写法:
ALTER USER 'your_username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_actual_password'; - 远程访问要单独改:
ALTER USER 'your_username'@'%' IDENTIFIED WITH mysql_native_password BY 'your_actual_password'; - 必须立即跟一句:
FLUSH PRIVILEGES;,否则变更不生效 - 如果提示
ERROR 1396 (HY000),说明该用户不存在,得先CREATE USER再改
my.cnf 里设 default_authentication_plugin 没用
这个配置项只影响新创建的用户,对已存在的用户完全无效:
- 删掉
my.cnf里类似default_authentication_plugin=mysql_native_password的行,它解决不了问题 - 某些云数据库(如阿里云 RDS)根本不允许改配置文件,
ALTER USER是唯一可行路径 -
mysql_native_password插件本身可能没加载:在 MySQL 8.4+ 或严格安全模式下,该插件默认不启用,需手动执行INSTALL PLUGIN mysql_native_password SONAME 'auth_socket.so';(注意文件名因平台而异)
最易被忽略的是:‘root’@‘localhost’ 和 ‘root’@‘127.0.0.1’ 是两个独立账户,必须分别查、分别改;Navicat 改完后要关掉旧连接窗口再新建,它会缓存握手协议版本。











