версия МариадБ: 10.5.22
db.Ping()
возвращается driver: bad connection
package main
import (
"database/sql"
"log"
"net/http"
"os"
"time"
"github.com/gin-gonic/gin"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", os.Getenv("DATABASE_URL"))
if err != nil {
log.Fatal(err)
}
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(25)
db.SetConnMaxLifetime(2 * time.Minute)
router := gin.Default()
api := router.Group("/api")
api.GET("/health", func(c *gin.Context) {
err := db.Ping()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"message": "OK",
})
})
if err := router.Run(":8080"); err != nil {
log.Fatal(err)
}
}
логи сервера:
[mysql] 2024/07/09 02:04:23 connection.go:49: unexpected EOF
[mysql] 2024/07/09 02:04:34 connection.go:49: unexpected EOF
[mysql] 2024/07/09 02:04:44 connection.go:49: unexpected EOF
Я пробовал играть с различными настройками БД, но безуспешно.
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(25)
db.SetConnMaxLifetime(2 * time.Minute)
@danblack та же ошибка API: {"ошибка": "драйвер: плохое соединение"} журналы сервера: [mysql] 2024/07/09 03:29:58 Connection.go:49: неожиданный EOF
Измените свою основную функцию, чтобы она регистрировала более подробную информацию в случае сбоя соединения: db, err := sql.Open("mysql", dsn) if err != nil { log.Fatalf("Ошибка открытия базы данных: %v", err) } // Проверяем правильность соединения с базой данных err = db.Ping() if err != nil { log.Fatalf("Ошибка пингования базы данных: %v", err) }
@AdesojiAlu не дал мне никакой новой информации. журнал: 024/07/10 00:42:44 Error pinging database: driver: bad connection
Мой пароль не был правильно проанализирован, поскольку он имеет специальный символ.
Использование formatDSN()
решило мою проблему.
Можете ли вы попробовать другую функцию подключения, например, выполнить
SELECT 1
?