This repository has been archived on 2026-01-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Game/Server/common/db/mysql/mysql.go
2025-06-25 00:01:48 +08:00

91 lines
1.6 KiB
Go

package mysql
import (
commonConfig "common/config"
"common/log"
"common/query"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"time"
)
const (
DBNameEcosmos = "ecosmos"
DBNameEcosmosShop = "ecosmos_shop"
)
var dbs = make(map[string]*gorm.DB)
var queryS = make(map[string]*query.Query)
func Init(cfg *commonConfig.MysqlConfig) error {
db, err := initOneDB(cfg, DBNameEcosmosShop)
if err != nil {
return err
}
queryS[DBNameEcosmosShop] = query.Use(db)
db, err = initOneDB(cfg, DBNameEcosmos)
if err != nil {
return err
}
query.SetDefault(db)
queryS[DBNameEcosmos] = query.Q
return nil
}
func initOneDB(cfg *commonConfig.MysqlConfig, dbName string) (*gorm.DB, error) {
dialect := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", cfg.User, cfg.Password, cfg.Host, cfg.Port, dbName)
db, err := gorm.Open(
mysql.New(
mysql.Config{
DSN: dialect,
},
),
&gorm.Config{
TranslateError: true,
},
)
if err != nil {
return nil, err
}
sqlDb, err := db.DB()
if err != nil {
return nil, err
}
sqlDb.SetMaxOpenConns(50)
sqlDb.SetMaxIdleConns(5)
sqlDb.SetConnMaxLifetime(time.Second * 10)
if err = sqlDb.Ping(); err != nil {
return nil, err
}
dbs[dbName] = db
return db.Debug(), nil
}
func DBQuery(dbName string) *query.Query {
if q, ok := queryS[dbName]; ok {
return q
}
log.Errorf("mysql db not init: %v", dbName)
return nil
}
func Close() error {
fmt.Println("close mysql connect")
for _, db := range dbs {
sqlDb, err := db.DB()
if err != nil {
return err
}
err = sqlDb.Close()
if err != nil {
return err
}
}
return nil
}