Golang Go语言中 求助 go mysql 创建的连接数超出设置的最大值

发布于 1周前 作者 bupafengyu 来自 Go语言

Golang Go语言中 求助 go mysql 创建的连接数超出设置的最大值

3iA8RH.png

创建了 5000 个协程通过一个对象去操作数据库。 已经设置了最大连接数是 50,通过 show processlist,发现创建的连接数远远大于设置的,请问这是为什么?

4 回复

连接池了解一下

更多关于Golang Go语言中 求助 go mysql 创建的连接数超出设置的最大值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


用了链接迟,上面设置的最大链接数就是针对链接池的

用了连接池 maxOpenConns 也是 50 的吧。是不是代码里没用同一个连接池

在Golang中,如果你遇到MySQL连接数超出设置的最大值的问题,这通常是由于连接池管理不当或连接未正确关闭导致的。以下是一些解决这个问题的建议:

  1. 检查并调整MySQL的最大连接数

    • 登录到MySQL服务器,使用SHOW VARIABLES LIKE 'max_connections';查看当前最大连接数。
    • 如果需要,可以在MySQL配置文件中(通常是my.cnfmy.ini)增加max_connections的值,然后重启MySQL服务。
  2. 优化Golang中的数据库连接池

    • 使用database/sql包和适当的MySQL驱动(如github.com/go-sql-driver/mysql)。
    • 设置连接池的最大打开连接数,例如:
      db, err := sql.Open("mysql", "user:password@/dbname?max_conns=10")
      if err != nil {
          log.Fatal(err)
      }
      db.SetMaxOpenConns(10) // 确保连接池不会超出这个值
      db.SetMaxIdleConns(5)  // 设置最大空闲连接数
      
    • 注意:max_conns参数是特定于驱动的,不是标准database/sql的一部分,具体使用需参考驱动文档。
  3. 确保连接被正确关闭

    • 使用defer db.Close()在函数结束时关闭连接,或者使用rows.Close()stmt.Close()在查询和语句执行完毕后关闭资源。
    • 定期检查代码中是否有未关闭的连接泄露。

通过上述步骤,你应该能够解决MySQL连接数超出设置最大值的问题。如果问题依旧,建议进一步检查应用的并发模型和数据库访问模式。

回到顶部