原因
应用程序在使用驱动的有效空闲连接时候,发现数据库的连接已经失效(因为连接超过wait_timeout时间),用一个失效的连接查数据,所以报错。
解决办法
- 将sql驱动SetConnMaxLifetime和SetConnMaxIdleTime设置时间,并且小于数据库的wait_timeout时间(单位秒)。
- 调小wait_timeout。
分析
应用程序配置 | 数据库配置 | 分析 |
---|---|---|
SetConnMaxLifetime,SetConnMaxIdleTime | wait_timeout | maxLifeTime=30s,wait_timeout=20s,如果在25s时候查询,由于空闲连接没被释放,那么报错,如果在35s时候查询,会用新的连接,不会报错 |
查询和设置wait_timeout
标签:unexpected,socket,数据库,查询,报错,timeout,连接,wait From: https://blog.51cto.com/thinklili/6599898show global variables like 'wait_timeout'; set global wait_timeout=20000;