重点:设置超时时间与 mysql 的超时时间一致
在本地开发环境里发现以前的 Go 项目时不时出现这个报错的情况提示:127.0.0.1:3306: wsarecv: An established connection was aborted by the software in your host machine.
查看说是 golang sql 连接池超时,数据库自动断开导致的问题。
如果是 mysql 数据库的话,数据库本身有一个超时时间,超过这个时间,数据库自动就断开连接。
处理方法:
1. 查看数据库断开连接时间
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)
mysql 的 interactive_timeout 默认值是 120,wait_timeout 默认值是 120。
SetMaxOpenConns 用于设置最大打开的连接数,默认值为 0 表示不限制。
SetMaxIdleConns 用于设置闲置的连接数。
SetConnMaxLifetime (time.Duration (120) * time.Second) // 设置超时时间与 mysql 的超时时间一致(不设置就默认永久有效)
发表评论 取消回复