package database import ( "log" "os" "strings" "time" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" ) func OpenMySQL(dsn string, logLevel string) (*gorm.DB, error) { db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: newGormLogger(logLevel), }) if err != nil { return nil, err } sqlDB, err := db.DB() if err != nil { return nil, err } // 限制连接池,避免本地压测瞬间打满 MySQL max_connections。 sqlDB.SetMaxOpenConns(50) sqlDB.SetMaxIdleConns(10) sqlDB.SetConnMaxLifetime(30 * time.Minute) sqlDB.SetConnMaxIdleTime(5 * time.Minute) return db, nil } func newGormLogger(logLevel string) logger.Interface { level := logger.Warn if strings.EqualFold(strings.TrimSpace(logLevel), "debug") { level = logger.Info } return logger.New( log.New(os.Stdout, "\r\n", log.LstdFlags), logger.Config{ SlowThreshold: 500 * time.Millisecond, LogLevel: level, IgnoreRecordNotFoundError: true, Colorful: false, }, ) }