java - 间歇性 JDBC 管道损坏和链接失败

标签 java mysql jdbc database-connection

 Excepcion:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
 ...
 Caused by: java.net.SocketException: Broken pipe

我已经读过很多与此类似的问题。 因此,在宣布这个问题“不值得”之前,让我先澄清一些事情

我的 JDBC 链接完全正常工作。

  • 身份验证没有问题
  • Sql 已启动并正在运行
  • max_connections 为 300,从未达到
  • 并发线程连接数始终在 5 到 9 之间
  • 我正在使用 MySQL 5.0.95(是的...我知道,我无法控制服务器资源)
  • 和Mysql-connector-java 5.1.5
  • mysql性能变量已基于Percona Toolkit配置

我的具体问题是:

  • 此错误是由网络引起的吗?因为它看起来完全是随机的。
  • 这是适合该 mysql 版本的 mysql 连接器还是这可能是所有错误的根源?

谢谢

最佳答案

Broken pipeline 消息意味着另一端关闭了连接,可能是因为接收到的数据包顺序错误,或者因为客户端和服务器之间的状态不同步或类似的原因。也许您的应用程序和服务器之间存在防火墙来终止持久连接?或者也许一段时间内管道(连接)上没有任何 Activity ,并且服务器关闭了它?无论如何,如果您使用连接池机制(you should!) ,应该可以将此类情况的处理委托(delegate)给它。

或者,如果您打算始终使用 MySQL,则可以尝试将 failOverReadOnly=false&maxReconnects=10&autoReconnect=true 添加到连接字符串中。这是特定于 MySQL JDBC 驱动程序的,因此,我强烈建议您配置连接池机制来测试连接,然后再将连接传递到应用程序。

关于java - 间歇性 JDBC 管道损坏和链接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37707104/

相关文章:

java - 如何从 HTML/JS 和 android 调用 Java 服务器端方法?

Java - 创建一个可以通过其他方法操作和打印的二维数组

php - 将 mysql 数组动态填充到下拉菜单中

php - 关系数据库设计: User lists

php - 散列密码并将其和盐保存到 mysql pdo utf8 编码

java - 如何检查连接池是否被使用

java - 将制表符分隔的文件加载到 jdbc 中

java - 快速准确的稀疏 svd 库?

java - 我怎样才能找到一个字段(jackson)的 JSON 键?

java - 超过锁定等待超时;尝试重启事务