• 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)

  • 相关阅读:
    【?】Hello。。。
    【Calc】对于‘精分’的研究
    [AFO]记五年oi生涯及CSP2019复赛游记
    CF#579div.3
    「BZOJ1827」奶牛大集会
    「BZOJ2821」作诗 && 「BZOJ2724」蒲公英
    「BZOJ4576」262144
    「Bzoj5055」膜法师
    「51nod1689」逛街
    「51nod1681」公共祖先 &&「51nod2553」双重祖先
  • 原文地址:https://www.cnblogs.com/hailong88/p/12098810.html
Copyright © 2020-2023  润新知