MySQL 8.0 连不上大概率是客户端不支持默认的 caching_sha2_password 认证插件,需登录后执行 ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'pwd' 并 FLUSH PRIVILEGES,注意 root@localhost 与 root@127.0.0.1 需分别处理,且 Navicat 等工具需重启连接配置。

MySQL 8.0 连不上,大概率不是密码错了,而是客户端根本不认识 caching_sha2_password 这个插件。 它是 MySQL 8.0 默认启用的认证方式,但 Navicat 15 及更早、PHP 7.3 及更早、旧版 JDBC 驱动、某些 Docker 环境下的客户端都缺这个插件的实现逻辑——连接直接卡在握手阶段,报错类似 Authentication plugin 'caching_sha2_password' cannot be loaded 或 ERROR 2059。
怎么确认真是这个插件惹的祸
先别急着改配置,登录 MySQL 命令行(用能连上的方式,比如 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' 是两个独立用户,得分别查、分别改。
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再改
my.cnf 里设 default_authentication_plugin 的真实作用
在 [mysqld] 段加这一行:
需要创建、读取、编辑或处理 Word 文档(.docx / .dotx)时使用。触发词:'Word'、'word 文档'、'.docx'、'生成报告'、'制作合同/简历/方案/说明书'、'提取 word 内容'、'在文档里查找替换'、'给文档加页眉页脚/目录/表格'。也用于把任意内容排版成一份正式的 Word 文件。不要用它处理 PDF、Excel 或无关编程任务。中文创作场景尤其适合:小说大纲稿、投稿文档、合同、简历、工作总结。
default_authentication_plugin=mysql_native_password
它只影响「之后新建的用户」,对已存在的用户完全无效。很多人改完就以为万事大吉,结果发现 root 还是连不上——因为 root 是安装时创建的,早就用 caching_sha2_password 加密了。Docker 场景下可在 command 里加参数启动,但已有数据照样得手动 ALTER USER。
云数据库(如阿里云 RDS)只能靠 ALTER USER
托管服务不给你碰 my.cnf 或重启权限,default_authentication_plugin 这条路走不通。唯一可靠的方式就是登录后对每个要连接的用户逐个执行 ALTER USER ... IDENTIFIED WITH mysql_native_password BY ...。新建用户时也得主动指定插件:
CREATE USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass123';
否则新用户默认还是 caching_sha2_password,一样连不上。
最容易被忽略的一点:Navicat 缓存了旧连接配置,改完插件后不关掉重开、不删掉重配连接,它可能还在用旧的握手流程重试——看着 SQL 执行成功了,连接却依然失败。


















