应先确认用户认证插件再操作;执行select user, host, plugin from mysql.user where user = 'your_user',若plugin为caching_sha2_password且客户端为旧版navicat或pymysql,则需用alter user 'user'@'host' identified with mysql_native_password by 'pwd'并flush privileges。

直接改用户认证插件最有效,但必须匹配 host、显式带密码、执行 FLUSH PRIVILEGES,漏掉任一环节都会连不上。
怎么确认真是 caching_sha2_password 在报错
别信错误提示字面意思,也别猜。用还能连上的账号(比如 root 本地登录)进 MySQL 命令行,执行:
SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user';
重点看 plugin 列是不是 caching_sha2_password,同时核对 host 是 localhost、127.0.0.1 还是 %——这三个完全独立,Navicat 默认走 127.0.0.1,不是 localhost。
常见不支持该插件的组合包括:
- Navicat ≤15(尤其是 12/14)、SQLyog 等老 GUI 工具
- JDBC 驱动是
mysql-connector-java:5.1.x - Python 用
pymysql 或 <code>mysqlclient - PHP 7.3 及更早 +
mysqli扩展未启用或版本太旧
ALTER USER 必须写全 'user'@'host' 并带密码
MySQL 把 'root'@'localhost'、'root'@'127.0.0.1'、'root'@'%' 当作三个不同用户。只改其中一个,其他照常报错。
将 LaTeX(.tex)学术论文转换为 Word(.docx),支持可编辑的 OMML 公式、原生 Word 表格、嵌入图形、IEEE 双栏排版及参考文献
语法必须严格:
- ✅ 正确(改本机 socket 连接):
ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - ✅ 正确(改 Navicat 默认的 TCP 连接):
ALTER USER 'your_user'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'your_password'; - ❌ 错误(漏
BY,会清空密码):ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password; - ❌ 错误(
IDENTIFIED BY单独出现,语法报错):ALTER USER 'your_user'@'%' IDENTIFIED BY 'pwd';
不带 BY 子句不是“保留原密码”,而是把密码字段置空,账户立刻锁死。
FLUSH PRIVILEGES 不是可选项,是必执行步骤
MySQL 的权限和用户元数据缓存在内存里。ALTER USER 只更新内存结构,不刷盘也不立即生效。不执行 FLUSH PRIVILEGES,客户端重连时看到的仍是旧的 plugin 值。
执行顺序必须是:
- 查清楚目标
user和host - 用完整语法执行
ALTER USER ... IDENTIFIED WITH ... BY ... - 立刻跟一句
FLUSH PRIVILEGES; - 重启客户端(Navicat 要彻底关掉再开,它会缓存握手参数)
改完再查一次:SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user';,确保 plugin 已变成 mysql_native_password。
最容易被忽略的是客户端行为:Navicat 不删旧连接、不重建,或者 URL 里密码含 @、/ 被解析截断,会导致服务端改对了,客户端还在拿错参数重试。










