我是靠谱客的博主 岁月静好,最近开发中收集的这篇文章主要介绍golang sql连接超时解决,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如果是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)

最后

以上就是岁月静好为你收集整理的golang sql连接超时解决的全部内容,希望文章能够帮你解决golang sql连接超时解决所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(610)

评论列表共有 0 条评论

立即
投稿
返回
顶部