MySQL 8.0.16+ 中 ALTER USER 必须写全 'user'@'host'、显式带 BY 'password' 并执行 FLUSH PRIVILEGES,否则权限或密码不生效;plugin 匹配、host 精确性及客户端兼容性是常见失败根源。

直接改 ALTER USER 就行,但必须写全 'user'@'host'、显式带 BY 'password'、再跟一句 FLUSH PRIVILEGES——漏任一环都会连不上。
怎么确认真是 caching_sha2_password 在报错
别猜,进 MySQL 命令行(用 root 或高权限账号)执行两行:
-
SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user';—— 看plugin列是不是caching_sha2_password -
SHOW VARIABLES LIKE 'default_authentication_plugin';—— 看全局默认值,但注意:它只影响新用户,老用户不受这个变量控制
如果 plugin 是 caching_sha2_password,且你用的是 Navicat ≤14、PHP mysqli 7.x、JDBC 5.1.x 或旧版 mysqlclient,那基本就是它了。典型错误包括:ERROR 2059、Authentication plugin 'caching_sha2_password' cannot be loaded、Client does not support authentication protocol requested by server。
Contact Form 7 是 Rock Lobster Inc. 公司长期运行的 WordPress 表单插件,拥有超过 1000 万次活跃安装,并在 contactform7.com 提供官方文档。此技能适用于需要了解网站表单、邮件模板、验证行为和 shortcode 位置在 Contact Form 7 中实际处理方式的代理。
ALTER USER 必须带 host 和明文密码
MySQL 把 'root'@'localhost' 和 'root'@'127.0.0.1' 当作两个完全独立的账号,客户端连哪个,你就得改哪个。
- Navicat 默认填
localhost→ 改'root'@'localhost' - 命令行用
mysql -h 127.0.0.1 -u root→ 改'root'@'127.0.0.1' - 远程应用连
192.168.1.100→ 改'root'@'192.168.1.100'或'root'@'%' - 语句必须含
BY 'your_password':即使密码不变,也得重输一遍明文;否则会清空密码或报ERROR 1827 - 错误写法:
ALTER USER 'root' IDENTIFIED WITH mysql_native_password;(缺 host、缺 BY)→ 必报错 - 正确写法:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyPass123!';
改完不 FLUSH PRIVILEGES 就等于没改
MySQL 8.0.16+ 权限缓存更严格,ALTER USER 只更新磁盘表,不自动刷新运行时认证状态。
- 必须立刻执行:
FLUSH PRIVILEGES;—— 没输出即成功,有Query OK表示已加载 - 某些环境(如宝塔、部分 Docker 镜像)还需重启服务:
sudo systemctl restart mysql - Navicat / DBeaver 等工具要新建连接测试,旧连接会复用已建立的会话,改了也看不到效果
真正容易被忽略的,是 host 的精确匹配——写成 'root'@'localhost' 却用 127.0.0.1 连,或者以为改了 my.cnf 里的 default_authentication_plugin 就能覆盖老用户,结果查 mysql.user 发现 plugin 还是老样子。


















