92 lines
1.7 KiB
Go
92 lines
1.7 KiB
Go
package database
|
|
|
|
import (
|
|
"fmt"
|
|
"ssq-desk/internal/storage/models"
|
|
"sync"
|
|
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var (
|
|
mysqlDB *gorm.DB
|
|
mysqlOnce sync.Once
|
|
)
|
|
|
|
// MySQLConfig MySQL 连接配置
|
|
type MySQLConfig struct {
|
|
Host string
|
|
Port int
|
|
User string
|
|
Password string
|
|
Database string
|
|
}
|
|
|
|
// GetMySQLConfig 获取 MySQL 配置(从配置文件或环境变量)
|
|
func GetMySQLConfig() *MySQLConfig {
|
|
return &MySQLConfig{
|
|
Host: "39.99.243.191",
|
|
Port: 3306,
|
|
User: "u_ssq",
|
|
Password: "u_ssq@260106",
|
|
Database: "ssq_dev", // 需要根据实际情况修改数据库名
|
|
}
|
|
}
|
|
|
|
// InitMySQL 初始化 MySQL 连接
|
|
func InitMySQL() (*gorm.DB, error) {
|
|
var err error
|
|
mysqlOnce.Do(func() {
|
|
config := GetMySQLConfig()
|
|
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
|
config.User, config.Password, config.Host, config.Port, config.Database)
|
|
|
|
mysqlDB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// 测试连接
|
|
sqlDB, err2 := mysqlDB.DB()
|
|
if err2 != nil {
|
|
err = err2
|
|
return
|
|
}
|
|
|
|
if err2 = sqlDB.Ping(); err2 != nil {
|
|
err = err2
|
|
return
|
|
}
|
|
|
|
// 自动迁移表结构
|
|
err2 = mysqlDB.AutoMigrate(
|
|
&models.SsqHistory{},
|
|
&models.Authorization{},
|
|
&models.Version{},
|
|
)
|
|
if err2 != nil {
|
|
err = fmt.Errorf("MySQL 表迁移失败: %v", err2)
|
|
return
|
|
}
|
|
})
|
|
|
|
if err != nil {
|
|
return nil, fmt.Errorf("MySQL 连接初始化失败: %v", err)
|
|
}
|
|
|
|
return mysqlDB, nil
|
|
}
|
|
|
|
// GetMySQL 获取 MySQL 连接实例
|
|
func GetMySQL() *gorm.DB {
|
|
if mysqlDB == nil {
|
|
db, err := InitMySQL()
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
return db
|
|
}
|
|
return mysqlDB
|
|
}
|