Golang、mysql:错误 1040:连接过多

我正在使用 github.com/go-sql-driver/mysql 驱动程序。


我打开一个数据库:


db, err := sql.Open("mysql", str)

然后我有两个函数,每个函数使用以下 mysql 代码调用 200 次:


rows, err := db.Query("select name from beehives")

if err != nil {

    panic(err)

}       

defer rows.Close()

第二:


    err = db.QueryRow("select id, secret, shortname from beehives where shortname = ?", beehive).Scan(&id, &secre

    switch {

    case err == sql.ErrNoRows:

        err = errors.New("Beehive '"+beehive+"' not found.")

    case err != nil:

        panic("loginBeehive: "+ err.Error())

    default:

        // ... do the work

第一个是恐慌。


当我只打开一次数据库时,怎么会有多个连接,我该如何关闭它们?


MMTTMM
浏览 287回答 3
3回答

30秒到达战场

*DB您返回的对象sql.Open不对应于单个连接。最好将其视为数据库的句柄:它为您管理连接池。您可以控制打开的连接与数`(* DB).SetMaxOpenConns和其对怠速连接。所以基本上这里发生的事情是,db.Query并db.QueryRow尝试为自己获取连接,而数据库句柄不会对同时连接的数量施加任何限制,因此当它打开的数量超过 mysql 可以处理的数量时,您的代码会出现恐慌。

慕田峪4524236

尽量让准备好的发言db.Prepare(query string) (*Stmt, error)和比stmt.Query或stmt.Exec比stmt.Close重用连接。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go