首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL返回“连接太多”错误

问MySQL返回“连接太多”错误
EN

Stack Overflow用户
提问于 2020-06-29 02:20:59
回答 1查看 143关注 0票数 0

我正在做这样的事情:

代码语言:javascript
复制
import(
    "database/sql"
    "github.com/go-sql-driver/mysql"
)

var db *sql.DB

func main() {
    var err error
    db, err = sql.Open(...)

    if err != nil {
        panic(err)
    }

    for j := 0; j < 8000; j++ {
        _, err := db.Query("QUERY...")
        
        if err != nil {
            logger.Println("Error " + err.Error())
            return
        }
    }
 }

它适用于前150个查询(为此,我使用另一个函数进行),但在这之后,我得到了错误:

代码语言:javascript
复制
mysqli_real_connect(): (HY000/1040): Too many connections

所以很明显我做错了什么,但我找不到是什么。我不知道如何为每个查询打开和关闭新连接。

代码语言:javascript
复制
Error in the log file : 
"reg: 2020/06/28 03:35:34 Errores  Error 1040: Too many connections"
(it is printed only once)

Error in mysql php my admin: 
 "mysqli_real_connect(): (HY000/1040): Too many connections"
 "La conexión para controluser, como está definida en su configuración, fracasó."
(translated: "the connection for controluser, as it is defined in ti's configuration , failed.")
 "mysqli_real_connect(): (08004/1040): Too many connections"
EN

回答 1

Stack Overflow用户

发布于 2020-06-29 03:23:49

每次调用Query()时,都会创建一个新的数据库句柄。每个活动句柄都需要一个唯一的数据库连接。由于您没有调用Close,因此处理程序和连接将一直保持打开状态,直到程序退出。

在完成每个查询后调用rows.Close()来解决您的问题:

代码语言:javascript
复制
    for j := 0; j < 8000; j++ {
        rows, err := db.Query("QUERY...")
        if err != nil {
            logger.Println("Error " + err.Error())
            return
        }
        // Your main logic here
        rows.Close()
    }

此Close()调用通常在defer语句中调用,但这排除了for循环的使用(因为defer仅在then函数返回时执行),因此您可能希望将主逻辑转移到新函数:

代码语言:javascript
复制
    for j := 0; j < 8000; j++ {
        doStuff()
    }

// later

func doStuff() {
    rows, err := db.Query("QUERY...")
    if err != nil {
        logger.Println("Error " + err.Error())
        return
    }
    defer rows.Close()
    // Your main logic here
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62626544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档