database.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package config
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. "time"
  7. "github.com/sirupsen/logrus"
  8. "gorm.io/driver/mysql"
  9. "gorm.io/gorm"
  10. "gorm.io/gorm/logger"
  11. )
  12. var (
  13. AdminDB *gorm.DB
  14. LogDBGroup map[int32]*gorm.DB
  15. )
  16. func InitDatabase() {
  17. initAdminDB()
  18. initLogDBGroup()
  19. }
  20. func initAdminDB() {
  21. connString := os.Getenv("ADMIN_MYSQL_DSN")
  22. AdminDB = connDB(connString)
  23. }
  24. func initLogDBGroup() {
  25. LogDBGroup = make(map[int32]*gorm.DB)
  26. // 游戏服数据库组,新加服务器时往后续就行
  27. // 当连续3各数据库都不存在时,停止遍历
  28. failNum := 0
  29. for i := 1; i < 10000; i += 1 {
  30. conn := os.Getenv(fmt.Sprintf("LOG%v_MYSQL_DSN", i))
  31. if conn == "" {
  32. failNum += 1
  33. if failNum > 3 {
  34. return
  35. }
  36. //logrus.Warnf("initSingleGraveDB empty index[%v] present, skipped..", index)
  37. continue
  38. }
  39. failNum = 0
  40. db := connDB(conn)
  41. LogDBGroup[int32(i)] = db
  42. }
  43. }
  44. func connDB(connString string) *gorm.DB {
  45. newLogger := logger.New(
  46. log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
  47. logger.Config{
  48. SlowThreshold: time.Second, // Slow SQL threshold
  49. LogLevel: logger.Info, // Log level(这里记得根据需求改一下)
  50. IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger
  51. Colorful: false, // Disable color
  52. },
  53. )
  54. db, err := gorm.Open(mysql.Open(connString), &gorm.Config{
  55. Logger: newLogger,
  56. SkipDefaultTransaction: true,
  57. })
  58. if connString == "" || err != nil {
  59. logrus.Fatalf("mysql lost: %v", err)
  60. }
  61. sqlDB, err := db.DB()
  62. if err != nil {
  63. logrus.Fatalf("mysql lost: %v", err)
  64. }
  65. sqlDB.SetMaxIdleConns(10)
  66. sqlDB.SetMaxOpenConns(20)
  67. sqlDB.SetConnMaxLifetime(2 * time.Hour)
  68. return db
  69. }