是caching_sha2_password插件导致报错;执行select user,host,plugin from mysql.user where user='your_user'确认plugin为caching_sha2_password,且客户端为navicat≤14等旧版本。

确认是不是caching_sha2_password在报错
别急着改,先验证问题根源。进 MySQL 命令行(用 root 或高权限账号),执行:
SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user';
如果 plugin 列显示 caching_sha2_password,且你用的是 Navicat ≤14、PHP mysqli 7.x、JDBC 5.1.x、mysqlclient ERROR 2059、Authentication plugin 'caching_sha2_password' cannot be loaded、Client does not support authentication protocol requested by server。
ALTER USER 必须写全 user@host 并显式指定密码
MySQL 把 'root'@'localhost' 和 'root'@'127.0.0.1' 当作两个完全独立的账号;漏掉 host 或写错,等于没操作。
-
ALTER USER语句必须带BY 'password'—— 即使密码不变,也得重输明文;否则会清空密码或静默失败 - 远程连接要改
'user'@'%'或'user'@'192.168.1.100',不能只写'user' - 常见误写:
ALTER USER 'root' IDENTIFIED WITH mysql_native_password;→ 缺 host、缺 BY,必报错 - 正确示例:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyPass123!';
改完必须 FLUSH PRIVILEGES,否则不生效
MySQL 8.0.16+ 权限缓存更严格,ALTER USER 不自动刷新认证状态。尤其在宝塔、Docker 或某些云环境里,跳过这步=白改。
- 执行完
ALTER USER后,立刻跟一句:FLUSH PRIVILEGES; - 部分环境(如某些 Docker 镜像)还需重启服务:
sudo systemctl restart mysql - Navicat / DBeaver 等工具需新建连接测试,旧连接会复用已建立的会话
别被 default_authentication_plugin 迷惑
default_authentication_plugin = mysql_native_password 只影响**新创建的用户**,对已有用户完全无效。很多人加了配置、重启了服务,但 SELECT user, host, plugin FROM mysql.user 一看还是 caching_sha2_password,就是因为这个根本没动老账号。
- 该配置写在
/etc/mysql/mysql.conf.d/mysqld.cnf的[mysqld]段下 - 云数据库(阿里云 RDS、腾讯云 CDB、AWS RDS)通常禁止修改此参数
- 如果你只是临时调试命令行,可以在
~/.my.cnf的[client]段加:default_authentication_plugin = mysql_native_password,仅影响本地客户端
真正容易被忽略的,是 host 的精确匹配和 FLUSH PRIVILEGES 的强制性——不是“建议”,是必须。改完查一遍 plugin 字段,再试连,比反复重启服务更省时间。











