navicat等旧客户端连不上mysql 8.0主因是认证协议不兼容:服务端默认用caching_sha2_password,客户端不支持该插件,报错2059;需执行alter user 'root'@'localhost' identified with mysql_native_password by '密码' 并flush privileges。

这是客户端不支持 MySQL 8.0 默认认证插件导致的连接失败,不是数据库配置错了,也不是密码输错了——是“语言不通”。
为什么 ALTER USER 后还是连不上
常见现象:执行了 ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'pwd',也执行了 FLUSH PRIVILEGES,但 Navicat、Python 应用或 JDBC 依然报错 2059。
- 没指定完整 host:必须写成
'user'@'192.168.1.%'或'user'@'%',不能只写'user';查当前用户用SELECT user,host FROM mysql.user; - 改的是错的用户:MySQL 8.0 新建用户默认走 caching_sha2_password,但你可能连的是另一个同名但 host 不同的用户(比如
'user'@'localhost'和'user'@'127.0.0.1'是两个独立账号) - 应用连的是 root 或其他未修改的账号:别只盯着自己新建的账号,检查连接字符串里实际用的用户名和 host
- 某些云数据库(如阿里云 RDS)禁用了
ALTER USER ... IDENTIFIED WITH,会提示ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement,此时需先用临时密码重置再改插件
mysql_native_password 降级要注意的三件事
这不是“修 bug”,而是权衡安全与可用性的临时适配。以下操作直接影响生产环境风险:
🎯 HR面试评价助手(Word版格式) 生成可直接复制到Word文档的标准格式HR面试评价 【使用方式】 1. 发送口令:HR面试评价 2. 粘贴JD文字 3. 上传简历文档 4. 上传面试记录(可选) 5. 复制生成的评价到Word 【输出特点】 - 纯文本格式,可直接粘贴到Word - 层次清晰,标题加粗...
-
mysql_native_password不支持 RSA 密钥交换,若连接未启用 SSL,密码可能以可还原的哈希形式在网络上传输(尤其在非内网环境) - 降级后,
caching_sha2_password用户创建的原有密码强度不会自动降低,但新设密码不再经过 SHA-256 加密,建议同步更新为强密码 - 不要对
root用户长期使用此方式,尤其当 MySQL 实例暴露在公网或跳板机可直连时;优先考虑升级驱动或启用 SSL
哪些场景下 --default-auth 根本没用
mysql -u user -p --default-auth=mysql_native_password 这类命令行参数,仅作用于当前终端启动的 mysql 客户端进程。
- Navicat、SQLyog、DBeaver 等图形工具:完全忽略该参数,它们依赖内置驱动库,不读取命令行开关
- Java 应用(JDBC):必须升级
mysql-connector-java到 ≥ 8.0.11,且连接 URL 中要显式加?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false(后者仅测试环境) - Python 的
mysqlclient:≤ 1.4.6 版本不支持 caching_sha2_password,必须升到 ≥ 2.0.0;pymysql无此限制,但性能略低 - Docker 容器内应用:即使宿主机
mysql命令能连,容器内服务仍需单独确认其驱动版本
最易被忽略的兼容性盲区
很多人修完用户插件就以为万事大吉,结果上线后某天某个定时任务突然失败——问题常出在这些地方:
- 系统用户(如
debian-sys-maint):Ubuntu/Debian 自带的 MySQL 包会创建该用户用于日常维护,它默认也走 caching_sha2_password,不改会导致mysql-systemd-start报错 - 复制用户(replication user):如果搭建主从,
CHANGE REPLICATION SOURCE TO用的用户也得同步改插件,否则 IO 线程启动失败 - my.cnf 中的 [client] 段设置:加了
default_authentication_plugin=mysql_native_password只影响本地mysql命令行,不影响任何程序调用 libmysqlclient 的行为 - PHP 的
mysqli扩展:必须确认启用了mysqlnd驱动(而非旧版libmysqlclient),且 PHP 版本 ≥ 7.4;PHP 7.2 自带驱动无法识别 caching_sha2_password










