Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
The last packet successfully received from the server was 30,027 milliseconds ago. The last packet sent successfully to the server was 30,028 milliseconds ago.
复制代码
该错误通常是由于 MySQL 连接意外断开导致的,常见原因包括:
客户端连接池(如 HikariCP、Druid)配置不当,包括:
空闲连接超时时间超过 MySQL wait_timeout(默认是 28800 秒,即 8 小时),导致连接被 MySQL 服务端关闭。
未配置适当的 Keep-Alive 机制,导致连接长时间未利用而被 MySQL 服务器关闭。
未进行连接有用性检查,大概导致客户端获取到失效连接。
连接未及时释放。
长时间未释放的连接无法通过连接池的 Keep-Alive 机制保持活泼,更容易因空闲超时被 MySQL 服务端或中间件关闭。
中间层组件的超时限定。
如果客户端与 MySQL 之间存在代理(如 ProxySQL)或负载均衡器(LB),这些组件大概会有独立的空闲连接超时设置,导致连接被提前断开。
网络标题,包括高耽误、丢包或短暂网络中断都会影响数据库连接的稳固性。
连接被 MySQL 服务器自动断开,如 DBA 手动执行KILL操作终止连接。
本文将深入剖析 Druid 连接池的连接有用性检测机制,重点探讨以下内容:
Druid 在哪些情况下会检查连接是否可用?
Druid 怎样保持连接的活泼状态(Keep-Alive 机制)?
Druid 连接池中常见参数的具体含义及其作用。
为什么 MySQL 的 general log 看不到validationQuery界说的检测语句执行?