|
|
- package db
-
- import (
- "context"
- "fmt"
- _ "github.com/go-sql-driver/mysql"
- "github.com/go-xorm/xorm"
- "go.mongodb.org/mongo-driver/mongo"
- "go.mongodb.org/mongo-driver/mongo/options"
- "SSW_WebPlatform/conf"
- "SSW_WebPlatform/utils"
- "SSW_WebPlatform/web/middleware/glog"
- "log"
- "path/filepath"
- "sync"
- "time"
- )
-
- var (
- masterEngine *xorm.Engine
- Lock sync.Mutex
- mgoDb *mongo.Client
- mlock sync.Mutex
- )
-
- //链接到数据库
- func MasterEngine() *xorm.Engine {
- //判断masterEngine是否存在
- if masterEngine != nil {
- return masterEngine
- }
- //创建之前会涉及并发,所以要加锁
- Lock.Lock()
- defer Lock.Unlock()
- //细节,防止多个请求锁住
- if masterEngine != nil {
- return masterEngine
- }
- c := conf.MasterDbConfig
- driveSource := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8",
- c.User, c.Pwd, c.Host, c.Port, c.DbName)
- engine, err := xorm.NewEngine(conf.DriverName, driveSource)
- //开启sql,debug
- //engine.ShowSQL(true)
- if err != nil {
- log.Fatal("dbhelper.DbinstanceMaster error= ", err)
- return nil
- } else {
- masterEngine = engine
- return masterEngine
- }
- return masterEngine
- }
-
- //创建mongoDb数据库链接
- func MgoDb() *mongo.Client {
- //判断mgoDb是否存在
- if mgoDb != nil {
- return mgoDb
- }
- //创建之前会涉及并发,所以要加锁
- mlock.Lock()
- defer mlock.Unlock()
- //细节,防止多个请求锁住
- if mgoDb != nil {
- return mgoDb
- }
- //1.建立链接
- ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
- client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
- if err != nil {
- log.Fatal("dbhelper.MgoDb error= ", err)
- return nil
- } else {
- mgoDb = client
- return mgoDb
- }
- }
-
-
- //数据备份
- func BackUp() {
- var (
- engine *xorm.Engine
- err error
- )
-
- c := conf.MasterDbConfig
-
- driveSource := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8",
- c.User, c.Pwd, c.Host, c.Port, c.DbName)
- if engine, err = xorm.NewEngine(conf.DriverName, driveSource); err != nil {
- return
- }
- if err = engine.Ping(); err != nil {
- glog.ErrorExtln("数据库连接失败:", "err:", err.Error())
- return
- } else {
- glog.ErrorExtln("数据库连接成功:", "driveSource", driveSource)
- }
- filename := utils.TimeFormat(time.Now(),"yyyy-MM-dd") + ".sql"
- dirpath := filepath.Join(c.BackUp,filename)
- err = engine.DumpAllToFile(dirpath, conf.DriverName)
- if err != nil {
- return
- }
-
- }
|