MySQL 8.0连接失败主因是客户端不支持caching_sha2_password插件,需先查SELECT user,host,plugin FROM mysql.user WHERE user='your_user'确认插件类型,再对'root'@'localhost'和'root'@'127.0.0.1'等独立账户分别执行ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'pwd'并FLUSH PRIVILEGES。

不是密码错了,也不是网络不通,而是客户端根本不认识 caching_sha2_password 这个认证插件——它只在 MySQL 8.0+ 默认启用,但旧版 Navicat、PHP 7.3、JDBC 5.x/7.x、Docker 内置客户端等压根没实现它的握手逻辑,连接直接卡在 TLS 前的认证阶段。
怎么确认真是 caching_sha2_password 搞的鬼
别急着改配置,先用能连上的方式(比如 mysql -u root -p)登录,执行:
SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user';
看 plugin 列是不是 caching_sha2_password。重点注意:'root'@'localhost' 和 'root'@'127.0.0.1' 是两个独立账户,得分别查、分别处理。
Word报告自动生成神器。自动生成专业Word文档报告,支持模板填充、目录生成、表格/图表插入、页眉页脚、多级标题、样式主题、批量邮件合并。当用户需要生成Word报告、创建合同文档、批量生成通知/证书、填充Word模板、制作商业计划书时触发。
- 如果输出里有
caching_sha2_password,且你用的是 Navicat ≤14、PHP ≤7.3、JDBC ≤8.0、或某些 Docker 镜像自带的 5.7 客户端,基本就是它 - 报错信息常是
ERROR 2059或Authentication plugin 'caching_sha2_password' cannot be loaded -
SHOW VARIABLES LIKE 'default_authentication_plugin';只反映新建用户的默认值,对已有用户完全无效
ALTER USER 改单个用户最稳妥
这是见效最快、影响最小的操作,不重启 MySQL,也不动全局配置:
- 必须显式重设密码,不能只写
IDENTIFIED WITH mysql_native_password而省略BY—— 否则密码被清空,账户直接锁死 - 改本地用户:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyPass123!'; - 改远程用户(如 Navicat 连服务器):
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'MyPass123!'; - 改完立刻执行:
FLUSH PRIVILEGES;,否则不生效 - 如果提示
ERROR 1396 (HY000),说明该用户不存在,得先CREATE USER再改
JDBC、PHP、Python 连接时容易漏掉的关键点
就算服务端改了插件,客户端驱动版本和连接参数不匹配照样连不上:
- JDBC:老驱动(
mysql-connector-java )必须加 <code>?allowPublicKeyRetrieval=true&useSSL=false,但allowPublicKeyRetrieval=true会削弱中间人防护,仅限可信内网 - PHP:mysqli 扩展需 ≥7.4,或改用 PDO + mysqlnd;旧版
mysqli_connect()直接失败 - Python:
mysqlclient 不支持,推荐换 <code>pymysql(纯 Python 实现,天然兼容) - Docker 场景下,宿主机的 Navicat 连容器内 MySQL,要确认容器暴露的是 TCP 端口,不是 Unix socket —— 后者可能绕过认证插件检查
最容易被忽略的是:很多一键安装包(XAMPP、MAMP)或 Docker 镜像自带的 mysql 客户端仍是 5.7 版本,它连不上自己装的 8.0 服务端——此时问题不在服务端,而在你本地那个“假客户端”。


















