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

概述

重点:设置超时时间与 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 的超时时间一致(不设置就默认永久有效)


最后

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

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部