Mysql Broken pipe错误
程序员文章站
2022-03-26 16:15:53
...
Mysql Broken pipe异常 Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketException MESSAGE: Broken pipe STACKTRACE: java.net.SocketException: Broken pipe at java.net.SocketOutputStream.socke
Mysql Broken pipe异常Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Broken pipe
STACKTRACE:
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
这个exception中我们可以得出是关于Socket的问题, 那么肯定就是关于网络方面的原因, 比如mysql down了。 或者网络有问题连不上mysql。
mysql会自动关闭掉空闲时间大于wait_timeout的连接。wait_timeout在可以在mysql配置文件里配置,默认的值是28800也就是8个小时。也就是说如果一个connection在8个小时候之内没有用使用过过的话, mysql server会把这个connection销毁掉。 这就是发生这个问题的原因了。 那么如何解决呢? 我们一般都用连接池来保存连接, 一般连接池都会有许多参数让你的连接池更高效。 我们以c3p0作为例子。 http://www.mchange.com/projects/c3p0/index.html, 这个是c3p0的文档,里面有许多参数,但是我们只要注意这个参数就行了。 maxIdleTime以下是对这个参数的解释。
引用
maxIdleTime
Default: 0
Seconds a Connection can remain pooled but unused before being discarded. Zero means idle connections never expire. [See "Basic Pool Configuration"]
在c3p0中maxIdleTime的默认值是0,也就是说永远都不会被expire, 解决这个问题的办法就是设置maxIdleTime比mysql的wait_timeout的值小一些就行了。
推荐阅读
-
mysql Out of memory (Needed 16777224 bytes)的错误解决
-
解决 mysql ERROR 1017:Can t find file解决错误
-
关于连接mysql数据库时出现的时区错误timezone的解决办法
-
从一个错误语句看Mysql 数据库命名规范
-
图片-mysql语句求指明错误?
-
php的慢速日志引起的Mysql错误问题分析_PHP教程
-
MySql出现#1036错误提示解决办法
-
Mysql Error:1205错误诊断_MySQL
-
MySQL之Field‘***’doesn’t have a default value错误解决办法
-
Mysql 错误问题汇总(不断更新中)_MySQL