/
conn.go
120 lines (96 loc) · 2.58 KB
/
conn.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package db
import (
"database/sql"
"fmt"
"os"
_ "github.com/go-sql-driver/mysql"
"github.com/llr104/slgserver/config"
"xorm.io/xorm"
"xorm.io/xorm/log"
)
var MasterDB *xorm.Engine
var dns string
// TestDB 测试数据库
func TestDB() error {
mysqlConfig, err := config.File.GetSection("mysql")
if err != nil {
fmt.Println("get mysql config error:", err)
panic(err)
}
tmpDns := fmt.Sprintf("%s:%s@tcp(%s:%s)/?charset=%s&parseTime=True&loc=Local",
mysqlConfig["user"],
mysqlConfig["password"],
mysqlConfig["host"],
mysqlConfig["port"],
mysqlConfig["charset"])
egnine, err := xorm.NewEngine("mysql", tmpDns)
if err != nil {
fmt.Println("new engine error:", err)
panic(err)
}
defer egnine.Close()
// 测试数据库连接是否 OK
if err = egnine.Ping(); err != nil {
fmt.Println("ping db error:", err)
panic(err)
}
_, err = egnine.Exec("use " + mysqlConfig["dbname"])
if err != nil {
fmt.Println("use db error:", err)
_, err = egnine.Exec("CREATE DATABASE " + mysqlConfig["dbname"] + " DEFAULT CHARACTER SET " + mysqlConfig["charset"])
if err != nil {
fmt.Println("create database error:", err)
panic(err)
}
fmt.Println("create database successfully!")
}
// 初始化 MasterDB
return Init()
}
func Init() error {
mysqlConfig, err := config.File.GetSection("mysql")
if err != nil {
fmt.Println("get mysql config error:", err)
return err
}
// 启动时就打开数据库连接
if err = initEngine(mysqlConfig); err != nil {
fmt.Println("mysql is not open:", err)
return err
}
return nil
}
func fillDns(mysqlConfig map[string]string) string {
return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=True&loc=Local",
mysqlConfig["user"],
mysqlConfig["password"],
mysqlConfig["host"],
mysqlConfig["port"],
mysqlConfig["dbname"],
mysqlConfig["charset"])
}
func initEngine(mysqlConfig map[string]string) error {
var err error
dns := fillDns(mysqlConfig)
MasterDB, err = xorm.NewEngine("mysql", dns)
if err != nil {
return err
}
maxIdle := config.File.MustInt("mysql", "max_idle", 2)
maxConn := config.File.MustInt("mysql", "max_conn", 10)
MasterDB.SetMaxIdleConns(maxIdle)
MasterDB.SetMaxOpenConns(maxConn)
showSQL := config.File.MustBool("xorm", "show_sql", false)
logLevel := config.File.MustInt("xorm", "log_level", 1)
logFile := config.File.MustValue("xorm", "log_file", "")
if logFile != "" {
f, _ := os.Create(logFile)
MasterDB.SetLogger(log.NewSimpleLogger(f))
}
MasterDB.SetLogLevel(log.LogLevel(logLevel))
MasterDB.ShowSQL(showSQL)
return nil
}
func StdMasterDB() *sql.DB {
return MasterDB.DB().DB
}