goulang 链接mysql出现 Too many connections

var DB *sql.DB

//注意方法名大写,就是public
func InitDB() {
    //构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
    path := strings.Join([]string{userName, ":", password, "@tcp(", ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
    //打开数据库,前者是驱动名,所以要导入: _ "github.com/go-sql-driver/mysql"
    DB, _ = sql.Open("mysql", path)
    //设置数据库最大连接数
     DB.SetConnMaxLifetime(2000)
    //设置上数据库最大闲置连接数
     DB.SetMaxIdleConns(1000)
    //验证连接
    if err := DB.Ping(); err != nil {
        fmt.Println("opon database fail")
        //return
    }
    fmt.Println("connnect success")
}

func Getselect(url string) int {
    //开启事务
    tx, err := DB.Begin()
    if err != nil {
        fmt.Println("tx fail2", err)
        return 1
    }
    stmt, err := tx.Prepare("SELECT id FROM yi08 WHERE url = ?")
    if err != nil {
        //log.Fatal(err)
        stmt.Close()
        fmt.Println(err)
        return 1
    }
    rows, err := stmt.Query(url)
    id := 0
    for rows.Next() {
        if err := rows.Scan(&id); err != nil {
            //log.Fatal(err)
            fmt.Println(err)
            return 1
        }
        // fmt.Printf("name:%s ,id:is %d\n", name, id)
    }
    defer rows.Close()
    return id
}
func main() {
    InitDB()
    for{
        id := Getselect("http://xxxxxxxxxxx")
        fmt.Println(id)
    }
}

这个求大神解决,运行一会就提示 Too many connections

共 2 个回复


jimmykuu

没有任何增删改操作,这里为何要开启事务?

# 0

18511635784

使用玩事务 你要关闭呀 亲

# 1