database.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package config
  2. import (
  3. "log"
  4. "os"
  5. "time"
  6. mysql2 "github.com/go-sql-driver/mysql"
  7. "github.com/sirupsen/logrus"
  8. "gorm.io/driver/mysql"
  9. "gorm.io/gorm"
  10. "gorm.io/gorm/logger"
  11. )
  12. var (
  13. DB *gorm.DB
  14. LDB *gorm.DB
  15. GDB1 *gorm.DB
  16. GDBGroup map[int]*gorm.DB
  17. AdminDB *gorm.DB
  18. )
  19. func InitDatabase() {
  20. initAdminDB()
  21. }
  22. func initAdminDB() {
  23. connString := os.Getenv("ADMIN_MYSQL_DSN")
  24. newLogger := logger.New(
  25. log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
  26. logger.Config{
  27. SlowThreshold: time.Second, // Slow SQL threshold
  28. LogLevel: logger.Info, // Log level(这里记得根据需求改一下)
  29. IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger
  30. Colorful: false, // Disable color
  31. },
  32. )
  33. db, err := gorm.Open(mysql.Open(connString), &gorm.Config{
  34. Logger: newLogger,
  35. SkipDefaultTransaction: true,
  36. })
  37. if connString == "" || err != nil {
  38. logrus.Fatalf("mysql lost: %v", err)
  39. }
  40. sqlDB, err := db.DB()
  41. if err != nil {
  42. logrus.Fatalf("mysql lost: %v", err)
  43. }
  44. sqlDB.SetMaxIdleConns(10)
  45. sqlDB.SetMaxOpenConns(20)
  46. sqlDB.SetConnMaxLifetime(2 * time.Hour)
  47. AdminDB = db
  48. }
  49. // GetDBName 获取数据库库名
  50. func GetDBName(conn string) string {
  51. dsnConf, _ := mysql2.ParseDSN(conn)
  52. return dsnConf.DBName
  53. }
  54. func GetDBId(DB *gorm.DB) int {
  55. for k, db := range GDBGroup {
  56. if db == DB {
  57. return k
  58. }
  59. }
  60. return 0
  61. }