必须改用户认证插件为mysql_native_password,因5.1.x驱动不支持caching_sha2_password协议且忽略allowpublickeyretrieval参数;alter user语句立即生效,但需注意密码合规性及安全风险。

不能靠配置 MySQL 8.0 的认证插件来“兼容”老旧 Java 驱动——5.1.x 驱动根本不认识 caching_sha2_password 协议,硬配参数无效,必须换驱动或改用户插件。
为什么 allowPublicKeyRetrieval=true 对 5.1.x 驱动没用?
这个参数只在 Connector/J 6.0+ 和 8.0+ 中被解析并参与密钥协商流程;5.1.x 驱动压根不识别它,连接时仍会卡在认证握手阶段,报错 Authentication plugin 'caching_sha2_password' cannot be loaded。你加了等于没加。
- 5.1.x 驱动的协议栈里没有实现 SHA256 密钥交换逻辑
- 即使服务端开了
require_secure_transport=OFF,它也拿不到公钥,更无法解密挑战 - 常见误操作:把 5.1.49 当“万能兼容版”,但它只是 5.x 系列最后一个版本,仍不支持新插件
如果真不能升级驱动,只能改 MySQL 用户插件
这是唯一对 5.1.x 驱动真正有效的路径:让服务端退回到它能理解的认证方式。注意不是改全局默认,而是改具体用户。
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
- 用 root 登录 MySQL 命令行:
mysql -u root -p - 执行:
ALTER USER 'your_app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 立即生效,无需重启 MySQL:
FLUSH PRIVILEGES; - 远程连接需确认
bind-address和防火墙允许%或对应 IP
MySQL 启动时设 default_authentication_plugin=mysql_native_password 的风险
这个配置会让所有新建用户(包括后续用 CREATE USER 加的)自动用老插件,看似一劳永逸,但有明显副作用:
- 新用户失去
caching_sha2_password的密码缓存优势,高频认证场景性能下降 - 若后续有人手动给用户切回
caching_sha2_password,而应用又没升级驱动,就会突然连不上 - Docker 环境中容易误以为“配置生效了”,实际镜像启动时未挂载配置或参数被覆盖
- 生产环境审计可能不接受长期禁用默认安全插件
最常被忽略的一点:改完用户插件后,mysql_native_password 本身要求密码长度 ≥ 8 且含大小写字母+数字+特殊字符(取决于 validate_password 插件策略),旧密码可能被拒绝——别只盯着认证方式,顺手检查下密码合规性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










