DBeaver连接突然断开是数据库服务端主动切断空闲连接所致,根本原因在于服务端wait_timeout等超时配置(如云数据库常设为300–600秒);可通过配置keep-alive-query(如SELECT 1)和keep-alive-interval实现保活,并启用自动重连作为兜底措施。

不会自动断开,是数据库服务端主动切断了空闲连接,DBeaver 本身没有“无操作自动断开”功能,只有保活和重连机制。
为什么连接会突然断开?
根本原因不在 DBeaver,而在数据库服务端的超时配置。MySQL 默认 wait_timeout 和 interactive_timeout 是 28800 秒(8 小时),但很多生产环境或云数据库(如阿里云 RDS、腾讯云 CDB)会主动调低到 300–600 秒。一旦连接空闲超过该值,服务端直接丢弃 TCP 连接,DBeaver 下次执行 SQL 时就会报错:SQL错误[08S01]: 从服务器成功接收到的最后一个数据包是xxx毫秒前...。
这不是 DBeaver “断开”,而是它尝试复用一个已被服务端关闭的 socket,结果读不到响应。
设置连接保活(Keep-Alive)查询
最直接有效的办法:让 DBeaver 定期发一个轻量查询,把连接“唤醒”,骗过服务端的空闲检测。
- 右键目标连接 → 编辑连接 → 切换到 高级属性 标签页
- 找到
keep-alive-query配置项,填入:SELECT 1 - (可选)如果服务端对保活频率敏感,可额外添加:
keep-alive-interval,单位毫秒,例如填30000表示每 30 秒执行一次 - 点击确定保存,**无需重启 DBeaver**,下次连接建立后即生效
注意:SELECT 1 是通用写法,适用于 MySQL、PostgreSQL、MariaDB;Oracle 需用 SELECT 1 FROM DUAL;SQL Server 可用 SELECT 1 或 SELECT GETDATE()。
启用自动重连(Auto-Reconnect)
保活解决的是“预防”,重连解决的是“兜底”。当保活失效(比如网络抖动、服务端强制 kill)导致连接中断时,自动重连能避免手动刷新。
- 右键连接 → 编辑连接 → 切换到 连接恢复 标签页
- 勾选
自动重连 - 设置
重连尝试间隔(建议5000,即 5 秒)和最大重连次数(建议3~5) - ⚠️ 关键限制:自动重连只在执行 SQL 时触发,**不会在连接列表里自动刷新状态图标**;也就是说,连接显示为“已连接”,但实际已断,直到你点运行才开始重试
这个机制依赖 JDBC 驱动支持,MySQL Connector/J 8.0+ 默认开启 autoReconnect=true,但 DBeaver 不直接暴露该参数,所以必须通过 UI 的“连接恢复”开关启用。
服务端 timeout 值无法修改时的替代方案
如果你用的是托管数据库(如云 RDS),通常没权限改 wait_timeout。此时要避免“连接长期挂着但不用”的习惯:
- 关闭不活跃的 SQL 编辑器标签页,减少后台连接占用
- 避免在连接上长期开着“实时仪表盘”或“活动会话监控”这类持续轮询的视图
- 开发调试阶段,可在连接名后加后缀标注用途(如
test_db (dev)),方便区分和及时关闭 - 真有长周期任务(如导出大表),改用脚本 + 命令行客户端(
mysql -e "SELECT ..."),不依赖 GUI 连接保活
真正容易被忽略的是:保活查询本身也会受服务端 timeout 影响——如果 keep-alive-interval 设得比 wait_timeout 还长,照样断。所以务必确认服务端值,再反推保活间隔,留出至少 10–20 秒余量。











