DBeaver会触发Too many connections,因其默认启用元数据自动加载、后台连接池预热及多标签页独立连接机制,导致每个SQL标签、树节点展开或刷新操作均新建连接;例如5个标签+2个ER图+1个导出任务可瞬占30+连接,远超MySQL默认max_connections=151限制。

为什么DBeaver自己会触发Too many connections?
DBeaver本身不占用MySQL连接数,但它默认开启的「元数据自动加载」「后台连接池预热」「多标签页独立连接」等行为,会让每个打开的SQL编辑器标签、每个展开的数据库树节点、甚至每次右键「刷新」都悄悄新建连接——尤其在连着一个max_connections = 151的默认实例时,开5个标签+2个ER图+1个数据导出任务,瞬间就占掉30+连接,而你根本没写一句业务SQL。
- 默认勾选「Connect on editor activation」:每次切到某个SQL标签就建新连接,不复用
- 「Database Navigator」里点开表→列→索引→触发
SHOW CREATE TABLE等元数据查询,每查一次都可能启新连接 - 多个连接配置指向同一个MySQL实例(比如dev/test/staging全配成localhost:3306),DBeaver会为每个配置单独维持连接池
- 未关闭的「Result Set」窗口长期挂起,其底层连接可能因
wait_timeout未同步而无法释放
立刻止血:DBeaver侧连接数压降操作
别急着改MySQL配置。先在DBeaver里把连接“管住”:
- 进 Preferences → Editors → SQL Editor → Execution,取消勾选 Connect on editor activation
- 进 Preferences → Database → Connection types,找到当前使用的MySQL连接类型,点击 Edit → 在 Connection settings 标签页里,把
connection pool size改成1(单连接模式)或明确设为3~5(非高并发调试场景够用) - 右键数据库连接 → Disconnect all connections,再手动 Connect 一次,避免残留Sleep连接
- 关闭所有不用的SQL编辑器标签、ER图、数据浏览窗口——它们各自持有连接
- 如果用了「SQL Console」或「Script execution」,检查是否开启了 Execute in separate connection,关掉它
MySQL端必须同步检查的三个值
DBeaver只是表象,真正的问题往往藏在MySQL连接状态里。用管理员账号登录后立即执行这三条:
-
SHOW VARIABLES LIKE 'max_connections';—— 看上限是不是还卡在默认151 -
SHOW STATUS LIKE 'Threads_connected';—— 如果返回值 ≥max_connections - 2,说明DBeaver只是压垮骆驼的最后一根稻草 -
SELECT ID, USER, HOST, DB, COMMAND, TIME FROM information_schema.PROCESSLIST WHERE COMMAND = 'Sleep' AND TIME > 300;—— 找出DBeaver留下的“僵尸连接”,KILLID;逐个干掉(别用KILL QUERY)
根治关键:DBeaver连接参数要和MySQL超时对齐
常见错误是DBeaver连接池设了maxLifetime=30min,但MySQL的wait_timeout=28800(8小时),结果连接池以为连接还健康,MySQL却早把它踢了,导致后续请求失败并新建连接——越积越多。
- 在DBeaver连接配置的 Driver properties 里,显式添加:
wait_timeout=600和interactive_timeout=600(单位秒,建议设为MySQL服务端值的一半) - 对应地,在MySQL配置文件
my.cnf的[mysqld]段里补上:wait_timeout = 600interactive_timeout = 600
然后执行SET GLOBAL wait_timeout = 600;生效(无需重启) - 如果用的是HikariCP或Druid作为应用层连接池,DBeaver的这些设置不影响它们——但你得确保应用连接池的
idleTimeout、maxLifetime也按同样逻辑对齐,否则问题照旧
最易被忽略的一点:DBeaver的「连接测试」按钮每次点击都会新建一个连接并保持30秒以上,频繁点它等于主动制造连接泄漏。真要测连通性,用telnet host 3306或mysqladmin ping更轻量。











