Linux版Navicat无“连接超时”滑块,因GUI精简且该参数由系统socket层控制;真正可配的是KeepaliveInterval(需小于wait_timeout的0.5倍)、Keepalive开关及“仅当有查询时发送ping”选项,三者协同防空闲断连。

Linux/macOS/Windows三端Navicat的Keepalive配置逻辑完全一致,但实际生效依赖操作系统底层TCP栈和数据库服务端策略;跨平台部署时最常掉坑的是把“连接超时”和“空闲保活”混为一谈,结果调了客户端却没防住服务端KILL。
KeepaliveInterval必须小于服务端wait_timeout × 0.5
这是跨平台通用铁律,不因系统而异。Navicat的KeepaliveInterval不是“超时时间”,而是心跳周期——它必须在服务端wait_timeout过期前至少触发两次,否则第一次心跳刚发完,第二次还没来得及发,连接就被MySQL干掉了。
- 连上数据库后立即执行:
SELECT @@wait_timeout;,只看这个值,别信@@interactive_timeout - 若返回
300(云数据库常见),KeepaliveInterval最多设120,推荐90或60 - 填错单位是高频错误:Navicat里单位是秒,输
60000就等于100分钟,等于没设 - Windows/macOS版界面有滑块,Linux版只能手输数字,但数值含义完全相同
勾选Keepalive开关才能启用TCP层保活
仅设KeepaliveInterval不够,必须同时打开Keepalive布尔开关。这个选项激活的是操作系统内核级TCP keepalive机制,能穿透NAT、防火墙、云负载均衡器等中间设备——而纯应用层心跳(如SELECT 1)对这些设备无效。
- Linux下若SSH隧道连数据库,
Keepalive开关只管Navicat到SSH服务器这段,SSH层还需单独配ServerAliveInterval - macOS某些版本会默认禁用TCP keepalive,需确认系统偏好设置→网络→高级→TCP中未勾选“关闭空闲连接”
- Windows注册表项
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime若被改小(如设为30000),可能与Navicat设置冲突,建议保持默认2小时
取消勾选“仅当有查询时发送ping”
这个选项默认勾选,但跨平台部署时它是断连元凶。一旦勾选,Navicat只在你手动执行SQL、刷新表结构、点开查询历史等操作时才发心跳;后台空闲时完全沉默——这跟没设保活一样。
- 协作模式下尤其危险:你开着Navicat但没操作,团队成员在Cloud里改了BI看板,你本地连接早被MySQLKILL了,首次点表就卡3–10秒重连
- Linux版该选项文字是“仅当有查询时发送ping”,macOS/Windows版叫法略有差异,但功能一致
- 勾选后,即使
KeepaliveInterval设成10秒,空闲时照样断——因为根本不会触发
跨平台真正难的不是设参数,而是确认每层链路是否真在发包:Navicat心跳、SSH隧道保活、数据库服务端接受keepalive、中间设备不丢探针——四者缺一不可。最容易被忽略的是云厂商RDS控制台里那个“连接空闲超时时间”,它可能比MySQL的wait_timeout还短,且无法修改,这时KeepaliveInterval再准也没用。


















