zoukankan      html  css  js  c++  java
  • golang sql连接池 超时 数据库自动断开 ->127.0.0.1:3 306: wsarecv: An established connection was aborted by the software in your host machine.

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

  • 相关阅读:
    机器学习知识点总结(1)
    RPC基本原理
    Oracle中ORA-01113,ORA-01110的简单解决
    跟着whatwg看一遍事件循环
    node进程间通信
    白话协程【前端视角】
    白话typescript中的【extends】和【infer】(含vue3的UnwrapRef)
    原来rollup这么简单之插件篇
    面试官: 说说你对async的理解
    白话web安全
  • 原文地址:https://www.cnblogs.com/hailong88/p/12098810.html
Copyright © 2011-2022 走看看