测试代码如下:
sqlDB, err := gormDB.DB() err = sqlDB.Ping() fmt.Println(err)
异常结果如下:
driver: bad connection
该问题导致的原因是:
mysql server端关闭了数据库连接,而golang gorm 客户端设置的 MaxLifetime 大于 mysql server端自动关闭连接的时间
mysql 版本:5.7.32
show global variables like 'wait_timeout';
wait_timeout | 28800 |
mysql 默认关闭时间是 8h。
MaxLifetime 时间必须小于 mysql wait_timeout
设置connMaxLifetime
sqlDB.SetConnMaxLifetime(5*60 * time.Second) // 5分钟
设置go 数据库连接池连接保持时间为5分钟,如果5分钟没有新的请求,client会关闭连接。如果5分钟内有新的请求,则服务端连接时间会重置为0。连接关闭后,连接池中没有可用连接,后续新的请求会重新创建数据库连接放到连接池中