连不上不是密码错了,是客户端不支持caching_sha2_password插件;需先用select user, host, plugin from mysql.user where user = 'your_username'确认插件类型,若为caching_sha2_password且客户端版本老旧(如navicat 12/13、pymysql
连不上不是密码错了,是客户端根本不认识
caching_sha2_password插件——改ALTER USER就行,但必须严格匹配 host、带密码、执行FLUSH PRIVILEGES。怎么确认真是
caching_sha2_password搞的鬼先用能连上的账号(比如
root)登录 MySQL 命令行,查你那个远程用户实际用的插件:SELECT user, host, plugin FROM mysql.user WHERE user = 'your_username';如果
plugin列显示caching_sha2_password,且你用的是 Navicat 12/13、PyMySQL mysqli 7.2–7.4,基本就是它了。
'your_username'@'localhost'、'your_username'@'127.0.0.1'、'your_username'@'%'是三个独立账号,别只查localhost就以为全搞定了- Navicat 默认走 TCP 连接,实际连接 host 是
127.0.0.1或公网 IP,不是localhost- 错误信息里带
Authentication plugin 'caching_sha2_password' cannot be loaded或Client does not support authentication protocol,基本可锁定
ALTER USER必须带密码、必须匹配 host、必须刷新权限这条命令看着简单,漏掉任意一点都会锁死自己或无效:
- 不能只写
IDENTIFIED WITH mysql_native_password,必须加BY 'real_password'——否则密码哈希被清空,账号彻底失联- host 必须和你远程连接时用的一致:连的是
192.168.1.100,就得改'your_username'@'192.168.1.100';连的是%,就改'your_username'@'%'- 执行完立刻跟
FLUSH PRIVILEGES;,部分云 RDS 和 Docker 环境不执行这句变更就不生效- 如果报
ERROR 1396,说明该用户不存在,得先CREATE USER 'your_username'@'%' IDENTIFIED BY 'xxx';再改改完还连不上?检查这三个常被忽略的点
认证插件改对了,不代表一定能连通:
- MySQL 配置里
bind-address还是127.0.0.1→ 改成0.0.0.0或注释掉,然后sudo systemctl restart mysqld- 用户没真正授权远程访问:
GRANT ALL ON *.* TO 'your_username'@'%';执行后也得FLUSH PRIVILEGES;- 防火墙或云平台安全组没开 3306 端口 → 本地用
telnet your_server_ip 3306测试是否通最常卡在
host不匹配或忘了FLUSH PRIVILEGES,这两个动作缺一不可。












