午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁(yè) > 知識(shí)庫(kù) > golang實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)備份的操作方法

golang實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)備份的操作方法

熱門標(biāo)簽:地圖標(biāo)注賺錢真假 遵義地圖標(biāo)注app 商家地圖標(biāo)注哪個(gè)好 合肥營(yíng)銷外呼系統(tǒng)收費(fèi) 深圳 德惠市地圖標(biāo)注 外呼系統(tǒng)從哪買 陜西400電話如何申請(qǐng) 承德電腦地圖標(biāo)注

背景

navicat是mysql可視化工具中最棒的,但是,在處理視圖的導(dǎo)入導(dǎo)出方面,它是按照視圖名稱的字母順序來處理的,若視圖存在依賴,在導(dǎo)入過程中就會(huì)報(bào)錯(cuò)。前面已經(jīng)用python寫了一個(gè),但在使用過程中,遇到xfffd編碼,python的pymysql會(huì)直接崩潰。發(fā)現(xiàn)golang沒有這個(gè)問題,正好用go重寫,來熟悉golang。

一些關(guān)鍵點(diǎn)

  1. map json,在處理主鍵與外鍵信息時(shí),需要用到j(luò)son數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)中間結(jié)果,因?yàn)橐`活處理,在golang中只能用map[string]interface{}來處理。
  2. interface{} 相當(dāng)于java中的object,能接受任意數(shù)據(jù)類型,方便但在使用時(shí)要做到心中有數(shù),不然一旦數(shù)據(jù)類型不匹配,程序就會(huì)崩潰。
  3. xfffd ,utf8中的占位符,超出范圍的utf8mb4入庫(kù)后,會(huì)被存儲(chǔ)為xfffd,數(shù)據(jù)導(dǎo)出時(shí),需要過濾掉。
  4. goroutine, golang的并發(fā)支持很獨(dú)特,我們的工具支持多個(gè)庫(kù)同時(shí)備份,很容易使用goroutine來實(shí)現(xiàn)并行。

代碼解析

按功能模塊對(duì)核心代碼進(jìn)行說明

main.go,并發(fā)、命令行參數(shù)

使用命令行參數(shù),接受一個(gè)參數(shù),來指定備份的內(nèi)容

package common

type OpFlag struct {
  Tables bool      //表結(jié)構(gòu)
  Datum bool       //表結(jié)構(gòu)和數(shù)據(jù)
  Views bool       //視圖
  Funcs bool       //函數(shù)與存儲(chǔ)過程
}

main.go,程序入口,處理命令行參數(shù)  

 if len(os.Args) > 1 {
    flag = common.OpFlag{
      Tables: false,
      Datum: false,
      Views: false,
      Funcs: false,
    }
    switch os.Args[1] {     //接受一個(gè)參數(shù)
    case "table":
      flag.Tables = true    //根據(jù)參數(shù)設(shè)定標(biāo)識(shí)量
    case "data":
      flag.Tables = true
      flag.Datum = true
    case "views":
      flag.Views = true
    case "funcs":
      flag.Funcs = true
    default:          //參數(shù)不正確,報(bào)錯(cuò)退出
      log.Fatal("You arg must be in : table, data, views or funcs.")
    }
  }else{            //無參數(shù),默認(rèn)導(dǎo)出所有
    flag = common.OpFlag{
      Tables: true,
      Datum: true,
      Views: true,
      Funcs: true,
    }
  }
  err := backUp.Export(flag) 根據(jù)參數(shù)進(jìn)行數(shù)據(jù)庫(kù)備份

Export.go

備份主流程,根據(jù)configs.json生成goroutine來備份數(shù)據(jù)庫(kù),并等待完成。

var configs interface{}
  fr, err := os.Open("./configs.json")
  if err != nil {
    return err
  }
  decoder := json.NewDecoder(fr)         //解析配置文件
  err = decoder.Decode(configs)
  confs := configs.(map[string]interface{})
  workDir := confs["workDir"].(string)
  ch := make(chan string)            //通道變量
  for key, value := range confs {
    if strings.HasPrefix(key, "db_") {
      dbConf := value.(map[string]interface{})
      dbConn := common.DbConnFields{   //數(shù)據(jù)庫(kù)相應(yīng)配置
        DbHost:  dbConf["db_host"].(string),
        DbPort:  int(dbConf["db_port"].(float64)),
        DbUser:  dbConf["db_user"].(string),
        DbPass:  dbConf["db_pass"].(string),
        DbName:  dbConf["db_name"].(string),
        DbCharset: dbConf["db_charset"].(string),
      }
      if dbConf["file_alias"] != nil {  //生成sql備份文件的命名
        dbConn.FileAlias = dbConf["file_alias"].(string)
      }
      go ExportOne(dbConn, workDir, ch, flag) //創(chuàng)建協(xié)程
    }
  }
  for key := range confs {            //阻塞主進(jìn)程,待所有協(xié)程完成工作
    if strings.HasPrefix(key, "db_") {
      fmt.Print( - ch )
    }
  }
  return nil

你需要編寫如下的配置文件來描述你要備份的數(shù)據(jù)庫(kù):

{
  "db_name1": {
    "db_host": "192.168.1.8",
    "db_port": 3306,
    "db_user": "root",
    "db_pass": "123456",
    "db_name": "name1",
    "db_charset": "utf8mb4",
    "file_alias": "file name1"
  },
  "db_name2": {
    "db_host": "localhost",
    "db_port": 3306,
    "db_user": "root",
    "db_pass": "123456",
    "db_name": "name2",
    "db_charset": "utf8mb4"
  },
  "database_dialect": "mysql",
  "workDir": "/home/zhoutk/gocodes/goTools/"
}

ExportOne.go

備份一個(gè)數(shù)據(jù)庫(kù)      

fileName := fields.FileAlias
  setSqlHeader(fields, fileName)      //設(shè)置導(dǎo)出文件說明
  if flag.Tables {            //如果表設(shè)置為真,導(dǎo)出表結(jié)構(gòu)
    err := exportTables(fileName, fields, flag)  //具體算法請(qǐng)參照源代碼
    if err != nil {
      ch - fmt.Sprintln("Error: ", fields.DbName, "\t export tables throw, \t", err)
      return
    }
  }
  if flag.Views {            //如果視圖設(shè)置為真,導(dǎo)出視圖
    err := exportViews(fileName, fields)//具體算法請(qǐng)參照源代碼,或python算法
    if err != nil {
      ch - fmt.Sprintln("Error: ", fields.DbName, "\t export views throw, \t", err)
      return
    }
  }
  if flag.Funcs {        //如果函數(shù)設(shè)置為真,導(dǎo)出函數(shù)和存儲(chǔ)過程
    err := exportFuncs(fileName, fields)//具體算法請(qǐng)參照源代碼
    if err != nil {
      ch - fmt.Sprintln("Error: ", fields.DbName, "\t export funcs throw, \t", err)
      return
    }
  }
  //導(dǎo)出工作完成,向通道輸入信息
  ch - fmt.Sprintln("Export ", fields.DbName, "\t success at \t", time.Now().Format("2006-01-02 15:04:05"))  

MysqlDao.go

數(shù)據(jù)庫(kù)查詢通用封裝,此工具只使用了ExecuteWithDbConn。靈活的使用map與interface{},將結(jié)果轉(zhuǎn)化為鍵值對(duì)象返回。

func ExecuteWithDbConn(sql string, values []interface{}, fields common.DbConnFields) (map[string]interface{}, error) {
  rs := make(map[string]interface{})
  dao, err := mysql.Open("mysql", fields.DbUser + ":"+fields.DbPass+"@tcp("+fields.DbHost+":"+
    strconv.Itoa(fields.DbPort)+")/"+fields.DbName+"?charset="+fields.DbCharset)
  defer dao.Close()
  if err != nil {
    rs["code"] = 204
    return rs, err
  }
  stmt, err := dao.Prepare(sql)
  if err != nil {
    rs["code"] = 204
    return rs, err
  }
  rows, err := stmt.Query(values...)
  if err != nil {
    rs["code"] = 204
    return rs, err
  }
  columns, err := rows.Columns()    //取出字段名稱
  vs := make([]mysql.RawBytes, len(columns))
  scans := make([]interface{}, len(columns))
  for i := range vs {         //預(yù)設(shè)取值地址
    scans[i] = vs[i]
  }
  var result []map[string]interface{}
  for rows.Next() {
    _ = rows.Scan(scans...)    //塡入一列值
    each := make(map[string]interface{})
    for i, col := range vs {
      if col != nil {
        each[columns[i]] = FilterHolder(string(col)) //過濾/xfffd
      }else{
        each[columns[i]] = nil
      }
    }
    result = append(result, each)
  }
  rs["code"] = 200
  //data, _ := json.Marshal(result)
  rs["rows"] = result
  return rs, err
}

項(xiàng)目地址

https://github.com/zhoutk/goTools

使用方法

git clone https://github.com/zhoutk/goTools
cd goTools
go get
go run main.go
go buid main.go
./main         #export all things of database
./main table      #export tables
./main data       #export tables  data
./main views      #export views
./main funcs      #export funcs  stored procedures

總結(jié)

以上所述是小編給大家介紹的golang實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)備份的操作方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

您可能感興趣的文章:
  • Golang操作MySql數(shù)據(jù)庫(kù)的完整步驟記錄
  • 如何利用Golang解析讀取Mysql備份文件
  • Golang中如何對(duì)MySQL進(jìn)行操作詳解
  • golang gorm 操作mysql及gorm基本用法
  • 在golang中操作mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼
  • golang中連接mysql數(shù)據(jù)庫(kù)

標(biāo)簽:揚(yáng)州 巴中 商丘 三門峽 新余 贛州 貴州 南陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)備份的操作方法》,本文關(guān)鍵詞  golang,實(shí)現(xiàn),mysql,數(shù)據(jù)庫(kù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)備份的操作方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于golang實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)備份的操作方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲女人天堂av| 久久精品99久久久香蕉| 久久琪琪电影院| 在线观看日产精品| 欧美精品久久久久| 拔插拔插海外华人免费| xxxx日本少妇| 日韩国产高清在线| 午夜成人免费电影| 久久这里有精品视频| 97超碰国产精品| 亚洲一级片网站| 一区二区日韩在线观看| 国产精品不卡在线| 日韩在线视频免费观看| 日韩av一区二区三区美女毛片| 亚洲图片另类小说| 日韩成人伦理电影在线观看| 亚洲二区在线观看| 国产精品国模在线| 欧美大尺度做爰床戏| 国产高清不卡视频| 日本电影亚洲天堂一区| 高清日韩一区| 日本爱爱爱视频| 2024国产精品视频| 亚洲最大在线视频| 97视频在线免费| 久久久国产成人| 久久久久高清精品| 欧美激情久久久| 麻豆一区二区三区视频| 久久激情一区| 亚洲成人免费在线视频| 激情五月综合色婷婷一区二区| 亚洲一级二级片| 国产精品卡一卡二卡三| 日本久久久久久久久| 无码任你躁久久久久久老妇| 久久99国产乱子伦精品免费| 亚洲国产又黄又爽女人高潮的| 久久这里只有精品18| 精品人妻一区二区色欲产成人| 精品美女永久免费视频| 国产精品国模大尺度私拍| 午夜爽爽爽男女免费观看| 国产日韩精品一区二区浪潮av| 欧美在线国产精品| 成人在线免费观看视频网站| 国产三级漂亮女教师| 91精品国产手机| 国产一二三四五| 无码久久精品国产亚洲av影片| 欧美日韩加勒比精品一区| 成人午夜两性视频| 欧美 日韩 国产 一区二区三区| 国产亚洲午夜高清国产拍精品| 国产精品久久久久9999| 毛茸茸多毛bbb毛多视频| 成人av在线网站| 7m精品福利视频导航| 亚洲最大免费视频| 国产精品福利一区| 国产精品免费久久久久久| 国产精品麻豆免费版现看视频| 成人一区二区三区| 日韩av免费在线观看| 国产一二三四五区| 一区二区三区不卡视频在线观看| 久久99影院| 999久久久久| 亚洲人成电影网站色| 手机在线国产视频| 国产一区二区伦理片| 欧美日韩国产二区| 国产美女免费网站| 亚洲欧美另类小说| 日本一区二区三区免费观看| 国产精品久久久久久免费| 精品亚洲国产视频| 18深夜在线观看免费视频| 亚洲欧洲日韩在线| 欧美一区二区三区在线播放| 国产三级第一页| 在线电影av不卡网址| 精品无码在线视频| 色综合久久综合网欧美综合网 | 欧美中文字幕视频| 污软件在线观看| 狠狠色狠色综合曰曰| 日本久久91av| 日韩av黄色片| 日韩国产高清视频在线| 人妻精品久久久久中文字幕 | 18成人在线观看| 加勒比在线一区二区三区观看| 国产浮力第一页| 久久视频这里只有精品| 人妻人人澡人人添人人爽| 日韩视频免费观看高清完整版 | 午夜精品小视频| 午夜精品久久久久久久白皮肤 | 日韩性生活视频| 四季av中文字幕| 欧美在线一区二区| 欧美久久久久久久久久久久久| 99九九99九九九视频精品| 精品久久久久久一区| 免费高清不卡av| 国产精品一区二区三区毛片淫片| 国产毛片在线视频| 91精品国产99久久久久久| 色悠悠在线视频| 欧洲色大大久久| 中日韩av在线播放| 亚洲欧美在线另类| 无码专区aaaaaa免费视频| 国产欧美一区二区精品性色 | 91精品久久久久久蜜臀| 国产吞精囗交久久久| 欧美日韩中文国产| 交换做爰国语对白| 欧美日韩免费观看一区二区三区 | 亚洲一区久久久| 蜜桃在线一区二区三区| 国产在线一区二区三区四区| 国产在线播放一区| 成人黄动漫网站免费| 少妇精品视频一区二区 | 亚洲欧美日韩综合一区| 日本特黄久久久高潮| 你懂的网址一区二区三区| 成人激情文学综合网| 小说区视频区图片区| 国产精品入口麻豆原神| 男操女免费网站| 亚洲成精国产精品女| 亚洲黄色片免费| 欧美高清视频一二三区 | 热久久一区二区| 久久一区二区三区欧美亚洲| 国产黄色精品网站| 亚洲精品电影在线一区| 久久久久久久综合日本| 91麻豆天美传媒在线| 亚洲精品国产一区二区精华液| 深夜福利网站在线观看| 亚洲激情在线观看| 久久久久久久久久影院| 97超级碰在线看视频免费在线看| 亚洲乱码在线观看| 免费av在线一区二区| 国产精品入口麻豆原神| 中文字幕亚洲日本| 精品国产91久久久久久久妲己| 亚洲伊人成人网| 国产剧情日韩欧美| 99精品一区二区| 91av俱乐部| 8v天堂国产在线一区二区| 欧美成人精品一区二区免费看片 | 国产精品进线69影院| 熟妇无码乱子成人精品| 国产亚洲欧美视频| 好吊色视频一区二区| 狠狠色综合一区二区| 91免费国产视频网站| 欧美又黄又嫩大片a级| 日韩av影视综合网| 一级片免费网站| 欧美日韩综合久久| 亚洲精品成人精品456| 色欲av无码一区二区三区| 在线播放国产一区中文字幕剧情欧美 | 女王人厕视频2ⅴk| 中文字幕少妇一区二区三区| 熟妇人妻av无码一区二区三区 | 天天综合中文字幕| 欧洲中文字幕精品| 少妇视频一区二区| 国产熟女精品视频| 日韩网站免费观看高清| 性网爆门事件集合av| 久久在线中文字幕| 欧美日韩五月天| 中文字幕a级片| 夜夜春亚洲嫩草影视日日摸夜夜添夜 | 日本中文字幕片| 亚洲免费伊人电影在线观看av| 欧美人与性囗牲恔配| 欧洲亚洲免费在线| 久久精品国产亚洲a| 天天爱天天做天天操| 日韩欧美一区在线| 国产乱理伦片在线观看夜一区| 久久婷婷国产精品| 欧美午夜精品久久久久久浪潮 | 亚洲欧洲日产国码av系列天堂| 中文字幕高清不卡| 无码人妻av一区二区三区波多野| 五月天亚洲综合情| 色偷偷亚洲男人天堂| 欧美激情一区二区三区四区| 蜜臂av日日欢夜夜爽一区| 亚洲精品中文在线影院| 久久99国产精品自在自在app| 国产香蕉一区二区三区| 精品一级少妇久久久久久久| 92国产精品观看| 亚洲欧洲国产伦综合| 中文字幕一区二区三区在线乱码| 日韩三级在线观看视频| 北条麻妃国产九九精品视频| 精品一区电影国产| 亚洲精品久久区二区三区蜜桃臀| 91精品一区二区三区蜜桃| 国产精品一二三区| 日韩一级片在线播放| 国产精品嫩草在线观看| 国产中文字幕一区二区| 男人的j进女人的j一区| 欧美大片在线观看一区| 欧美精品欧美精品| 东方av正在进入| 国产亚洲精品资源在线26u| 久久影院中文字幕| 欧美黄色免费影院| 一级片视频免费| 一本久久a久久精品亚洲 | 国产人妻大战黑人20p| 国内一区二区视频| 日韩国产在线看| 在线国产99| 国产成人精品网| 亚洲精品久久嫩草网站秘色| 国产成人精品综合| 在线能看的av网站| 久久久久久夜| 日韩免费性生活视频播放| 日本在线免费观看一区| 精品无码人妻一区二区三| 国产精品情趣视频| 欧美一级片在线播放| 在线观看免费看片| 免费av成人在线| 日韩av网站导航| 男女啪啪免费观看| 一二三区在线播放| 91黄色小视频| 国产午夜精品一区| 国产日韩欧美在线观看视频| 亚洲国产精品精华液ab| 97久久精品国产| 中文写幕一区二区三区免费观成熟| 蜜臀av一区二区在线观看| 亚洲美女在线看| 欧美一级片免费播放| 国产高清在线免费| 717成人午夜免费福利电影| 日本精品一区二区三区高清 久久| 日韩成人免费在线观看| 亚洲一区二区成人在线观看| 91午夜理伦私人影院| 欧美乱大交做爰xxxⅹ小说| 91网址在线看| 97色在线观看免费视频| av电影中文字幕| 国产精品自拍一区| 久久亚洲精品一区| 在线黄色免费看| 久久精品女人| 亚洲男人天堂九九视频| 精品99在线视频| 视频一区欧美日韩| 亚洲人在线观看| 欧美日韩在线成人| 免费av成人在线| 视频在线观看一区二区| 第四色婷婷基地| 精品在线一区二区三区| 久久精品色欧美aⅴ一区二区| 亚洲久久中文字幕| 国产一区二区精品在线观看| 久久国产精彩视频| 岛国精品一区二区三区| av中文字幕一区| 欧洲美女免费图片一区| a级大片在线观看| 中国色在线观看另类| 国产日韩欧美另类| 国产精品免费人成网站酒店| 亚洲自拍另类综合| 久久精品日产第一区二区三区乱码 | 久久九九精品| 色多多国产成人永久免费网站| 中文字幕资源在线观看| 成人性生交大合| 欧美最猛性xxxx| 大吊一区二区三区| 亚洲中国最大av网站| 黄色99视频| 怡春院在线视频| 欧美精品一区二区三区蜜桃| 国产美女三级视频| 国产又粗又猛又爽又黄91精品| 欧美黑人极品猛少妇色xxxxx| 亚洲成av人片在线观看无| 欧美激情一区不卡| 99久久无色码| 欧美一区免费看| 91精品欧美综合在线观看最新| 国产免费黄色一级片| 日本在线不卡一区| 久久99久国产精品黄毛片入口| a视频免费观看| 亚洲狼人国产精品| 欧美 日韩 国产在线| 国产视频手机在线| 亚洲人午夜精品| 国产成人精品综合久久久久99 | 亚洲国产精品一区二区久久 | 中文在线观看av| 欧美成人a∨高清免费观看| 亚洲成熟丰满熟妇高潮xxxxx| 国产最新精品精品你懂的| 欧美亚洲视频一区二区| 黑人操日本美女| 日本高清视频一区二区| 国产精品igao激情视频| 日本女优在线视频一区二区| 久久成人亚洲精品| 欧美一区二区三区成人精品| 一区二区三区高清| 水蜜桃一区二区三区| 色呦呦中文字幕| 久久国产精品视频| 中国1级黄色片| 色偷偷久久人人79超碰人人澡| 日本成人在线不卡| 老司机精品视频在线| 57pao国产成人免费| 免费在线黄色片| 3atv在线一区二区三区| 国产成人精品视频ⅴa片软件竹菊| 成人午夜激情视频| 91在线视频成人| 亚洲午夜无码久久久久| 亚洲免费av片| 中文字幕精品久久久| 一区二区三区在线观看国产| 伊人色综合影院| 美女在线一区二区| 国产91免费观看| 97久久久久久久| 亚洲国产高清福利视频| av地址在线观看| 一区二区三区视频在线看| 正在播放一区| 精品在线亚洲视频| 国产日韩在线视频| 亚洲特级黄色片| 色爱精品视频一区| 永久免费观看片现看| 精品婷婷伊人一区三区三| 一区二区三区视频在线观看免费| 国产午夜精品美女毛片视频| 欧美日韩亚洲一区二区三区四区| 色呦呦中文字幕| 国产91精品最新在线播放| 日韩精品一区二区亚洲av| 亚洲精品资源在线| 丰满少妇一区二区| 欧美主播一区二区三区美女| 欧美伦理片在线看| 国产精品欧美综合在线| 亚洲欧洲免费无码| 国产揄拍国内精品对白| 99国产在线视频| 亚洲国产精彩视频| 欧美大片免费观看| 久久精品这里有| 日韩国产精品一区| 国产又大又粗又爽的毛片| 欧美日韩一区二区欧美激情| 国产又黄又猛的视频| 亚洲综合色网站| 国产高清av在线播放| 久久影视一区二区| 日韩欧美亚洲在线| 国内外成人在线视频| 99九九视频| 日本亚洲最大的色成网站www| 国产日韩精品一区二区| www.com欧美| 日本不卡高字幕在线2019| 中国一级片黄色一级片黄| 欧美成年人视频网站| 日本午夜精品理论片a级app发布| 亚洲欧美福利视频| 美国黄色片视频| 亚洲精品久久久久中文字幕二区| 国产精品密蕾丝袜| 7777女厕盗摄久久久| xxxwww国产| 欧美乱妇15p| 在线观看国产网站| 欧美福利一区二区| 野花社区视频在线观看| 91精品国产综合久久精品app | 毛片在线免费视频|