Mysql “返回”;“连接太多”;错误
我在做这样的事情:Mysql “返回”;“连接太多”;错误,mysql,go,database-connection,Mysql,Go,Database Connection,我在做这样的事情: 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
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
}
}
}
很明显我做错了什么,但我找不到是什么。我不知道如何为每个查询打开和关闭新连接
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"
每次调用
Query()
,都会创建一个新的数据库句柄。每个活动句柄都需要一个唯一的数据库连接。因为您没有调用,所以在程序退出之前,该句柄和连接一直保持打开状态
完成每个查询后,通过调用rows.Close()
来解决问题:
j:=0的;j<8000;j++{
行,err:=db.Query(“查询…”)
如果错误!=零{
logger.Println(“错误”+err.Error())
返回
}
//你的主要逻辑在这里
行。关闭()
}
此Close()
调用通常在defer
语句中调用,但这排除了使用for循环(因为defer
仅在函数返回时执行),因此您可能希望将主逻辑移到新函数:
j:=0的;j<8000;j++{
多斯塔夫()
}
//后来
func doStuff(){
行,err:=db.Query(“查询…”)
如果错误!=零{
logger.Println(“错误”+err.Error())
返回
}
延迟行。关闭()
//你的主要逻辑在这里
}
每次调用Query()
,您都在创建一个新的数据库句柄。每个活动句柄都需要一个唯一的数据库连接。因为您没有调用,所以在程序退出之前,该句柄和连接一直保持打开状态
完成每个查询后,通过调用rows.Close()
来解决问题:
j:=0的;j<8000;j++{
行,err:=db.Query(“查询…”)
如果错误!=零{
logger.Println(“错误”+err.Error())
返回
}
//你的主要逻辑在这里
行。关闭()
}
此Close()
调用通常在defer
语句中调用,但这排除了使用for循环(因为defer
仅在函数返回时执行),因此您可能希望将主逻辑移到新函数:
j:=0的;j<8000;j++{
多斯塔夫()
}
//后来
func doStuff(){
行,err:=db.Query(“查询…”)
如果错误!=零{
logger.Println(“错误”+err.Error())
返回
}
延迟行。关闭()
//你的主要逻辑在这里
}
我使用了第一个建议(withdout defer),但现在脚本需要大约2分钟才能执行,这正常吗?我能快点吗?这可能很正常。按顺序执行8000个查询不是立即的。我使用了第一个建议(withdout defer),但现在脚本执行大约需要2分钟,这正常吗?我能快点吗?这可能很正常。按顺序执行8000个查询并不是立竿见影的。
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"