这是客户端不支持mysql 8.0默认caching_sha2_password认证插件所致,解决方法为升级客户端驱动或执行alter user 'user'@'host' identified with mysql_native_password by 'pwd';并flush privileges;。

MySQL 8.0 连接报错 “caching_sha2_password cannot be loaded” 怎么办
这是客户端不支持 MySQL 8.0 默认认证插件导致的,不是配置写错了,也不是网络不通。本质是服务器说“我只认 SHA-256+RSA 这套新协议”,而你的 Navicat、Python 脚本或 JDBC 驱动还在用老式 SHA-1 握手逻辑,双方根本对不上频道。
ALTER USER 切换为 mysql_native_password 的实操要点
执行前确保你有 root 或具备 ALTER USER 权限的账号,并能进 MySQL 命令行。常见漏掉的关键点:
- 必须写全用户名和主机,比如
'app'@'192.168.1.%',不能只写'app';查当前用户用SELECT user,host,plugin FROM mysql.user; - 语法必须是
ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'pwd';,IDENTIFIED BY单独出现会报错 - 改完一定要执行
FLUSH PRIVILEGES;,否则变更不生效 - 如果只是想换插件、不改密码,可以省略
BY 'pwd':ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password; - 不建议对
'root'@'%'这类公网可访问的账号长期使用该方式
为什么 --default-auth 参数在 Navicat/应用里完全无效
mysql -u user -p --default-auth=mysql_native_password 这种命令行参数,只影响当前终端调用的 mysql 客户端进程,对图形工具(Navicat、SQLyog)、Java 应用里的 com.mysql.cj.jdbc.Driver、Python 的 pymysql 或 mysqlclient 都不起作用。它不是服务端配置,也不修改用户元数据,纯属客户端本地协商开关。
构建并排查Microsoft Word邮件合并及DOCX模板工作流,使用合并域、内容控件、文档属性、重复区块、数据等
my.cnf 里设 default_authentication_plugin 真的能一劳永逸吗
可以,但有条件:
- 配置项必须放在
[mysqld]段下,[client]段下的default_authentication_plugin只影响本地mysql命令行,不影响服务端行为 - 修改后必须
sudo systemctl restart mysqld(不是reload),否则不生效 - 重启后,**新建用户**才会默认用
mysql_native_password;已有用户仍保持原插件,需单独ALTER USER - 阿里云 RDS、腾讯云 CDB 等托管数据库通常禁用
my.cnf修改权限,这条路直接走不通
真正容易被忽略的是:即使你把插件切回 mysql_native_password,如果客户端驱动版本太旧(比如 mysqlclient 或 <code>JDBC ),依然可能报错——插件切换只是解了一半,驱动兼容性得同步检查。










