确认是否为caching_sha2_password报错,需先执行show variables like 'default_authentication_plugin';查全局默认插件,再执行select user, host, plugin from mysql.user where user = 'root';查各host下root用户的实际插件,注意'localhost'、'127.0.0.1'和'%'是独立账号,alter user必须带by指定密码且执行flush privileges生效。

怎么确认真是caching_sha2_password在报错
别靠猜,进 MySQL 命令行直接查。先看全局默认插件:SHOW VARIABLES LIKE 'default_authentication_plugin';,再查具体用户用的什么:SELECT user, host, plugin FROM mysql.user WHERE user = 'root';。注意'root'@'localhost'、'root'@'127.0.0.1'和'root'@'%'是三个独立账号,Navicat 默认连的是'root'@'127.0.0.1',但很多人只改了localhost,漏掉这个就白忙。
ALTER USER 必须带密码重设,否则锁死自己
ALTER USER 语句不能省略密码,哪怕你只想换插件不改密码,也得写上原密码。常见错误写法:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password;——这会清空密码,导致下次连不上。
生产级WordPress REST API集成,用于管理文章、页面、媒体、WooCommerce产品、Elementor内容、SEO元数据、ACF及JetEngine字段
- 正确写法:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_actual_password'; - 如果用 IP 连(比如 Navicat 默认填 127.0.0.1),还得单独执行:
ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'your_actual_password'; - 改完必须立刻执行:
FLUSH PRIVILEGES;,否则不生效
my.cnf 配置只影响新用户,老用户完全不受影响
有人在[mysqld]段加了default_authentication_plugin = mysql_native_password就以为万事大吉,结果还是连不上——因为已有用户记录里的plugin字段不会自动更新。重启 MySQL 后,新建的用户才用新插件,root、repl_user这些老账号仍维持原值。
- 云数据库(如阿里云 RDS)通常禁写
/etc/my.cnf,这条路根本走不通 - Docker 或开发机可用启动参数
--default-authentication-plugin=mysql_native_password,但也只对新用户生效 - 宝塔面板用户别在 phpMyAdmin 里点“修改”按钮,它的 UI 常把
plugin字段设为只读,必须进 SQL 标签页手写ALTER USER
Navicat 缓存连接配置,改完服务端不重启软件等于没改
Navicat 会缓存握手参数和连接状态。即使你服务端已切回mysql_native_password,如果不关掉 Navicat 再重开,或者不删掉旧连接重建,它可能还在用旧的认证方式重试。
- 改完后务必关闭 Navicat,再重新打开
- 密码含
@、/等特殊字符时,URL 解析可能吃掉一部分,导致连错账号或密码错误 - 某些中间件(如 Django 的数据库连接池)、Docker 容器内应用也可能缓存旧连接,需要重启对应服务










