开发的时候,会用 `go run xxx.go`来运行golang,因为是web类的应用,因此会一直运行,
然后,我使用ctrl + c 来停掉,我发现,通过 ctrl + c 停掉的次数过多后,后面再通过 `go run xxx.go` 会报错无法连接mysql,重启机器后恢复正常
是不是 ctrl + c 停掉golang程序后,mysql的连接数还是占用着?导致超过mysql的最大连接数
也就是说ctrl + c停掉运行的golang,并没有全部释放占用的资源?
下面是我的使用方式:
```
package mysqldb
import(
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
"github.com/fecshopsoft/fec-go/config"
"sync"
"reflect"
"strconv"
)
var once sync.Once
var engine *(xorm.Engine)
func GetEngine() *(xorm.Engine){
once.Do(func() {
// 用于设置最大打开的连接数
maxOpenConns := config.Get("maxOpenConns")
// 用于设置闲置的连接数
maxIdleConns := config.Get("maxIdleConns")
mysql_user := config.Get("mysql_user")
mysql_password := config.Get("mysql_password")
mysql_host := config.Get("mysql_host")
mysql_port := config.Get("mysql_port")
mysql_db := config.Get("mysql_db")
charset := config.Get("charset")
autocommit := config.Get("autocommit")
// engine, err := xorm.NewEngine("mysql", "root:Zhaoy34ggsd@tcp(127.0.0.1:3306)/fec-go?charset=utf8&autocommit=true")
mysql_str := mysql_user + ":" + mysql_password + "@tcp(" + mysql_host + ":" + mysql_port + ")/" + mysql_db + "?charset=" + charset + "&autocommit=" + autocommit
//if mysql_str != "" {}
var err error
engine, err = xorm.NewEngine("mysql", mysql_str)
if err != nil {
panic(err.Error())
}
moc, _ := strconv.Atoi(maxOpenConns)
mic, _ := strconv.Atoi(maxIdleConns)
engine.SetMaxOpenConns(int(moc))
engine.SetMaxIdleConns(int(mic))
})
return engine;
}
```
也就是长连接这种,使用的时候通过这个函数获取mysql engine
https://www.cnblogs.com/aipiaoborensheng/p/5666455.html
理论上,如果golang程序退出,mysql会自动关闭,释放长连接。
#2
更多评论
对于mysql 长连接的web,是一直运行的程序,ctrl + c 退出golang的http后,mysql的长连接会自己关闭?还是需要手动关闭,手动关闭如何关闭?
#1