go mysql连接池超时_golang sql连接池 超时 数据库自动断开 ->127.0.0.1:3 306: wsarecv: An established connection was ab...

如果是mysql数据库的话,数据库本身有一个超时时间,超过这个时间,数据库自动就断开连接

查看数据库断开连接时间

show global variables like "%timeout%"

主要看 interactive_timeout 和 wait_timeout 的值。 (interactive_timeout针对交互式连接,wait_timeout针对非交互式连接。所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项。说得直白一点,通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。 在连接启动的时候,根据连接的类型,来确认会话变量wait_timeout的值是继承于全局变量wait_timeout,还是interactive_timeout)

SetMaxOpenConns用于设置最大打开的连接数,默认值为0表示不限制。

SetMaxIdleConns用于设置闲置的连接数。

SetConnMaxLifetime(time.Duration(8*3600) * time.Second) //设置超时时间(不设置就默认永久有效)

这就存在一个问题:如果sqlx连接池长时间没有连接数据库,数据库就会自动断开,这时候就会导致连接错误

[mysql] 2019/12/25 20:04:44 packets.go:36: read tcp 127.0.0.1:60160->127.0.0.1:3

306: wsarecv: An established connection was aborted by the software in your host

machine.

解决办法2中:

1 在数据库连接失效之前程序自动连接一次数据库(不推举)。

2 设置SetConnMaxLifetime失效时间,和数据库失效时间保持一致即可 SetConnMaxLifetime(time.Duration(8*3600) * time.Second)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值