navicat 15 启动即报“连接丢失”是因服务端按 wait_timeout 主动断连且客户端未启用有效重连机制;需勾选“自动重连”、设最大重试5次/间隔3秒,并配置“保持连接活跃”ping间隔≤wait_timeout(如30秒)。
navicat 15 启动后立即报“连接丢失”,不是网络波动导致的,而是服务端主动断连 + 客户端未启用重连机制共同作用的结果。
为什么刚打开 Navicat 就提示连接丢失
这通常发生在你上次关闭 Navicat 前连接处于空闲状态,而数据库服务端(如 MySQL)已按 wait_timeout 设置主动关闭了该 TCP 连接。Navicat 15 默认不会自动检测连接是否失效,也不会在首次执行查询前做预检——它直接复用旧连接句柄,结果一发 SQL 就触发 MySQL server has gone away 或类似错误。
- MySQL 默认
wait_timeout是 28800 秒(8 小时),但很多云数据库或运维策略会调低到 300 秒甚至 60 秒 - Navicat 15 的连接池不主动 ping,也不默认开启自动重连,所以“刚打开就丢”本质是连接已死、客户端不知情
- telnet 或 nc 能通不代表 Navicat 能连:TCP 层通 ≠ MySQL 协议层握手成功
必须勾选「自动重连」并调高重试上限
Navicat 15 的「自动重连」不是开关一开就万事大吉,它默认只重试 1 次、间隔 1 秒,对服务端重启或短暂抖动完全不够用。
- 编辑连接 → 「高级」选项卡 → 勾选「自动重连」
- 将「最大重试次数」设为
5(别用默认的1) - 将「重试间隔(秒)」设为
3(太短易被限频,太长影响响应) - 注意:此设置仅对查询执行阶段生效;连接建立失败时不会触发自动重连
「保持连接活跃」参数要和 wait_timeout 匹配
光靠自动重连治标不治本。如果服务端 60 秒就断连,而 Navicat 每 120 秒才 ping 一次,中间必然断档。
- 在同一个「高级」页签中,勾选「保持连接活跃」
- 「每隔(秒)发送一个ping包」填
30(必须 wait_timeout 值的一半) - 取消勾选「仅当有查询时发送ping」,否则空闲时照样断
- 同时登录数据库执行
SHOW VARIABLES LIKE 'wait_timeout';,若返回值 ≤ 60,建议联系 DBA 永久调高(wait_timeout = 28800)
驱动版本过旧会导致静默重连失败
Navicat 15 自带的 MySQL 驱动(如 mysql.jar)若仍是 5.1.x 系列,遇到 MySQL 8.0+ 的 caching_sha2_password 插件或 TLS 1.2+ 握手,会在重连时静默失败——界面卡在「执行中…」,日志里也无明确报错。
- 去 Navicat 官网下载对应版本的最新驱动(如
mysql-connector-j-8.0.33.jar) - 关闭 Navicat,进入安装目录
drivers/子文件夹,备份原mysql.jar,替换为新 JAR - 重启 Navicat,在连接「高级」页签底部确认「驱动」下拉框中显示版本号 ≥ 8.0
- Oracle / SQL Server 用户同理:检查
oracle.jar或sqlserver.jar是否匹配服务端版本
真正容易被忽略的是:Navicat 的「自动重连」不保证事务一致性。如果一条 INSERT 正在执行时断连,重连后可能重复提交——这不是配置能解决的,得靠应用层幂等设计或手动确认执行状态。











