当前位置: 首页 > 面试题库 >

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

华瀚漠
2023-03-14
问题内容

我正在使用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

第一个是恐慌。

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


问题答案:

sql.Open并没有真正打开与数据库的连接。

sql.DB维护与数据库的连接池。每次查询数据库时,程序都会尝试从该池获取连接,否则将尝试创建一个新池。一旦关闭这些连接,它们就会放回池中。

这是做什么的rows.Close()。你db.QueryRow("...")做同样的事情在内部,当你打电话Scan(...)

基本问题是您创建的查询过多,每个查询都需要一个连接,但是关闭连接的速度不够快。这样,您的程序必须为每个查询创建一个新的连接。

您可以通过在sql.DB上调用SetMaxOpenConns来限制程序使用的最大连接数。

有关更多信息,请参见http://go-database-sql.org/surprises.html。



 类似资料:
  • 问题内容: 我将MySQL 5.0用于GoDaddy(linux)托管的网站。 我在Web应用程序上进行了一些测试,突然我发现页面刷新非常缓慢。最终,经过漫长的等待,我到达了一个页面,上面写着“ MySQL错误,连接过多…”,它指向我的连接数据库的config.php文件。 只是我连接到数据库,没有其他用户。在每个页面上,我都在顶部包含config.php文件,并在页面末尾关闭mysql连接。中间

  • 我从W3Schools复制了它,当我尝试运行它时,它会给我一个错误。我是MySQL的新手,所以我正在尝试解决这个问题,但我不知道如何解决。 错误: 警告:mysqli::mysqli():(HY000/1045):用户'用户名'@'localhost'(使用密码:是)在第10行的C:\xampp\htdocs\Informatic a\test.php访问被拒绝连接失败:用户'用户名'访问被拒绝'

  • 在使用mysql连接Eclipse时出现此错误,任何人都可以提供帮助。 不建议在没有服务器身份验证的情况下建立SSL连接。 根据MySQL 5.5.45、5.6.26和5.7.6的要求,如果未设置explicit选项,默认情况下必须建立SSL连接。为了符合不使用SSL的现有应用程序,verifyServerCertificate属性设置为“false”。您需要通过设置显式禁用SSL,或者设置并为服

  • 问题内容: 祝大家有美好的一天。我有一个奇怪的错误。我创建了一个像这样的聊天: 问题/答案插入数据库 每2秒将ajax请求发送到php脚本,以获取新的问题/答案 直到今天,当我收到此错误时,它运行良好: 问题是我们不是那么多…(8),我不认为数据库不能同时支持超过8到16个连接(根据规范,聊天必须支持50-100个用户,因此8个是…小)。 所以…有人可以告诉我为什么会发生这种情况吗(昨天我们15岁

  • 如果问题模棱两可,请道歉。

  • 我尝试通过应用服务器Glassfish和JPA连接到mysql数据库。 我的persistence.xml如下所示: 有什么问题?