Navicat连接MySQL需在高级选项卡的“额外连接参数”中添加allowPublicKeyRetrieval=true&useSSL=false,且客户端驱动版本须≥8.0.9;否则参数无效或报错。
直接加 allowpublickeyretrieval=true 就能连上,但必须确认客户端驱动版本 ≥ 8.0.9,否则参数无效甚至报错。
Navicat 连接设置里怎么填这个参数
在 Navicat 新建或编辑 MySQL 连接时,进入「高级」选项卡 → 找到「MySQL 设置」或「连接属性」区域 → 在「初始命令」下方(或类似“额外连接参数”字段)中,添加:
allowPublicKeyRetrieval=true&useSSL=false
注意两点:
-
allowPublicKeyRetrieval=true必须显式写,不能只写allowPublicKeyRetrieval; - 如果服务端没配 SSL,
useSSL=false要一起加,否则部分旧版 Navicat(如 12.0.x)会先尝试 SSL 握手失败,再跳转公钥流程,最终仍报错; - 参数之间用
&连接,不是&(HTML 实体),也不是空格或逗号。
为什么加了参数还是报错:常见驱动兼容性问题
这个参数从 MySQL Connector/J 8.0.9 开始正式支持。如果你用的是:
- Navicat Premium 12.0.18 或更早版本:内置 JDBC 驱动通常是 5.1.x 或 6.0.x,不识别该参数,加了也白加;
- Navicat 15/16 默认带 8.0+ 驱动,但若手动替换了旧版
mysql-connector-java-5.1.47.jar,就会回退失效; - 错误提示里出现
Unknown system variable 'caching_sha2_password'或直接忽略参数、仍抛Public Key Retrieval is not allowed,基本可判定是驱动太老。
验证方式:连接报错后,点 Navicat 的「测试连接」旁的小日志图标,看底层 JDBC 报错堆栈是否含 ClassNotFoundException 或 Unsupported major.minor version —— 这说明驱动和 Java 版本不匹配,参数自然不生效。
不改参数也能连?但得满足这些前提
allowPublicKeyRetrieval=true 不是万能开关,它只在非 SSL 连接下起作用。以下情况即使加了参数也连不上:
- MySQL 服务端明确禁用了公钥分发:配置文件
my.cnf中设置了require_secure_transport=ON,此时必须走 SSL,allowPublicKeyRetrieval被强制忽略; - 用户账号绑定了
caching_sha2_password,但 MySQL 没生成 RSA 密钥对(sha2_password_private_key_path和sha2_password_public_key_path未配置或路径不可读),服务端无法返回公钥,客户端请求超时; - 防火墙或云厂商安全组拦截了 MySQL 端口(默认 3306),连接根本发不到服务端,错误表现可能被误判为认证问题。
真正要稳,得盯住三处:Navicat 用的驱动版本、MySQL 服务端是否允许非 SSL 公钥交换、网络链路是否通。少一个,光加参数只是把错误延后几秒而已。


















