我使用在 Windows 系统上运行的 MySQL 数据库,出于性能原因,我使用命名管道连接到它。
使用数据库(通过 Hibernate)的(Java)应用程序可能会让连接空闲很长时间,从而导致连接失败并显示以下消息:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收的最后一个数据包是 33 558 297 毫秒前。向服务器成功发送的最后一个数据包是 33 558 297 毫秒前。比服务器配置的“wait_timeout”值长。您应该考虑在应用程序中使用之前使连接过期和/或测试连接有效性,增加服务器配置的客户端超时值,或使用 Connector/J 连接属性“autoReconnect=true”来避免此问题。
autoReconnect
不幸的是 没有效果(也没有autoReconnectForPools
),但是文档wait_timeout
该状态wait_timeout
仅适用于“TCP/IP 和 Unix 套接字文件连接,而不适用于通过命名管道或共享内存建立的连接”。
我怎样才能改变wait_timeout
命名管道?
答案1
根据您配置数据源的方式,您可能能够指定类似这样的设置idle-timeout-minutes
。如果wait_timeout
设置为 5 分钟,则设置idle-timeout-minutes
为 4。
可以为 MySQL 连接指定的唯一两个超时值是等待超时和interactive_timeoutinteractive_timeout
. 如果它像客户端一样连接,也可能适用于命名管道。
如果我没记错的话,如果没有指定 wait_timeout 或 interactive_timeout,则默认值为 28800。