[gogf/gf]延迟1分钟之后再进行sql操作不行。

2024-06-25 940 views
1

代码: time.Sleep(1*time.Minute) i ,_:=dao.Where("id =?", id).Where("pay_status",0).Count() 报错信息: [mysql] 2019/10/15 15:11:56 packets.go:36: read tcp 192.168.0.212:55385->47.94.18.204:3306: wsarecv: An existing connection was forcibly closed by the remote host. 2019-10-15 15:11:56.732 [ERRO] SELECT COUNT(1) FROM orders WHERE (id =?) AND (pay_status=?), [244 0], 2019-10-15 15:11:56.598, 2019-10-15 15:11:56.731, 133 ms, Error: invalid connection Backtrace:

回答

9

@qinglong001 很抱歉,我没有复现你所说的问题,我测试了1分钟又1分钟,但是依旧无法复现,以下是我使用的测试代码:

package main

import (
    "github.com/gogf/gf/frame/g"
    "time"
)

func test1() {
    db := g.DB()
    db.SetDebug(true)
    time.Sleep(1 * time.Minute)
    r, e := db.Table("test").Where("id", 10000).Count()
    if e != nil {
        panic(e)
    }
    g.Dump(r)
}

func test2() {
    db := g.DB()
    db.SetDebug(true)
    dao := db.Table("test").Safe()
    time.Sleep(1 * time.Minute)
    r, e := dao.Where("id", 10000).Count()
    if e != nil {
        panic(e)
    }
    g.Dump(r)
}

func main() {
    test1()
    test2()
}

以下为IDE运行输出结果: image

6

@qinglong001 我怀疑你这个问题是因为MySQL服务端的wait_timeout系统参数比较短造成连接被服务端断掉了,而gdb的连接池默认情况下MaxConnLifetime为0,表示不过期,你可以将该参数设置小一点试试,例如10秒。设置方式参考:https://goframe.org/database/gdb/config

9

image

3

image

6

image

6

我的设置没问题。你上面的示例是在一个go文件。我的是在两个go文件

0

@qinglong001 问题无法复现,请更新到最新版本再试试,如果问题依旧请重新打开该issue

4

@qinglong001 @busyfree 看起来似乎是一个BUG。