.
This commit is contained in:
91
internal/database/mysql.go
Normal file
91
internal/database/mysql.go
Normal file
@@ -0,0 +1,91 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user