最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何利用Golang解析讀取Mysql備份文件

 更新時(shí)間:2019年12月01日 08:44:37   作者:daoshud1  
這篇文章主要給大家介紹了關(guān)于如何利用Golang解析讀取Mysql備份文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Golang具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

前期誤操作,導(dǎo)致數(shù)據(jù)庫(kù)表刪除,雖然數(shù)據(jù)量不多,但是通過(guò)binlog恢復(fù)比較麻煩,通過(guò)備份文件來(lái)恢復(fù),備份文件達(dá)36個(gè)G打開(kāi)都是問(wèn)題;

使用備份文件恢復(fù)

大文件編輯器,glogg-latest-x86_64-setup通過(guò)該文件打開(kāi)備份文件,雖然過(guò)程稍慢,但是能夠打開(kāi),且正常讀取編輯信息,要恢復(fù)的數(shù)據(jù)量不大時(shí)采取是沒(méi)問(wèn)題的,但是如果表幾十萬(wàn)行,操作起來(lái)就比較麻煩了;

Golang讀取備份文件

采用Golang讀取,借助編程語(yǔ)言的優(yōu)勢(shì)來(lái)讀取備份,經(jīng)過(guò)測(cè)試讀取指定備份文件(約36GB)表,大約需要12min,其實(shí)主要就是讀取遍歷備份文件的過(guò)程;

**
* @Author: ws
* @File: main
* @Date: 2019/11/16 0016 14:35
* @Remark: 
*/
var(
 _INSERT_INTO="INSERTINTO${table}VALUES"
 _Dir="temp"
)
var TABLE_CAR="T_SCM_CAR"

func ReadSqlFile(){
 t1 := time.Now() // get current time
 f, err := os.Open("E:\\update\\crm_20191112_210001.sql\\crm_20191112_210001.sql")
 defer f.Close()
 if err != nil {
 }
 buf := bufio.NewReader(f)
 nfs:=getTxtFile(TABLE_CAR)
 for {
  s, err := buf.ReadString('\n')
  if(err!=nil){
   logger.ERROR(err.Error())
   break
  }
  if err == nil {
   if s==""{
    continue
   }
   sqlstr:=getSqlStr(s,TABLE_CAR)
   if(sqlstr!=""){
    nfs.Write([]byte(sqlstr))
   }
  }
 }
 elapsed := time.Since(t1)
 fmt.Println("App elapsed: ", elapsed)
}
/**
調(diào)整驗(yàn)證每一行數(shù)據(jù)的格式化,并與預(yù)設(shè)是否一致,如果一致則讀取加載到
 */
func getSqlStr(sqlstr,tableName string)string{
 var realTableName=strings.Replace(_INSERT_INTO,"${table}",tableName,-1)
 replaceEmptyStr:=strings.Replace(sqlstr," ","",-1)
 tempS:=strings.ToUpper(strings.Replace(replaceEmptyStr,"`","",-1))
 if(len(tempS)>=len(realTableName)) {
  tabName := tempS[0:len(realTableName)]
  if (tabName ==realTableName) {
   return sqlstr
  }
 }
 return ""
}

/**
打開(kāi)txt文件
 */
func getTxtFile(fileName string)os.File{
 txtFile:=createToFile(fmt.Sprintf("%v/%v.txt",_Dir,fileName))
 nfs, err := os.OpenFile(txtFile.Name(), os.O_APPEND |os.O_RDWR|os.O_CREATE, 0644)
 if err != nil {
  logger.ERROR(fmt.Sprintf("打開(kāi)文件失敗:%v",err.Error()))
 }
 defer nfs.Close()
 nfs.Seek(0, io.SeekEnd)
 return *nfs
}


func readLine(r *bufio.Reader) (string, error) {
 line, isprefix, err := r.ReadLine()
 for isprefix && err == nil {
  var bs []byte
  bs, isprefix, err = r.ReadLine()
  line = append(line, bs...)
 }
 return string(line), err
}

func createToFile(fileName string)os.File{
 _, err := os.Stat(_Dir)
 if err == nil {
 }
 if os.IsNotExist(err) {
  os.MkdirAll(_Dir, os.ModePerm)
 }
 newFile, err := os.Create(fileName)
 if err != nil {
  logger.ERROR(fmt.Sprintf("文件創(chuàng)建失敗:%v",err.Error()))
 }
 defer func() {
  newFile.Close()
 }()
 newFile.WriteString("\xEF\xBB\xBF") // 寫(xiě)入U(xiǎn)TF-8 BOM,防止中文亂碼
 return *newFile
}

func main() {
 ReadSqlFile()
}

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 利用Golang解析json數(shù)據(jù)的方法示例

    利用Golang解析json數(shù)據(jù)的方法示例

    Go提供了原生的JSON庫(kù),并且與語(yǔ)言本身有效的集成在了一起。下面這篇文章將給大家介紹關(guān)于利用Golang解析json數(shù)據(jù)的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • Go語(yǔ)言操作MySQL的知識(shí)總結(jié)

    Go語(yǔ)言操作MySQL的知識(shí)總結(jié)

    Go語(yǔ)言中的database/sql包提供了保證SQL或類(lèi)SQL數(shù)據(jù)庫(kù)的泛用接口,并不提供具體的數(shù)據(jù)庫(kù)驅(qū)動(dòng)。本文介紹了Go語(yǔ)言操作MySQL的相關(guān)知識(shí),感興趣的可以了解一下
    2022-11-11
  • golang 輸出重定向:fmt Log,子進(jìn)程Log,第三方庫(kù)logrus的詳解

    golang 輸出重定向:fmt Log,子進(jìn)程Log,第三方庫(kù)logrus的詳解

    這篇文章主要介紹了golang 輸出重定向:fmt Log,子進(jìn)程Log,第三方庫(kù)logrus的詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go語(yǔ)言文件讀取的一些總結(jié)

    Go語(yǔ)言文件讀取的一些總結(jié)

    這篇文章主要介紹了Go語(yǔ)言文件讀取的一些總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Go語(yǔ)言展現(xiàn)快速排序算法全過(guò)程的思路及代碼示例

    Go語(yǔ)言展現(xiàn)快速排序算法全過(guò)程的思路及代碼示例

    這篇文章主要介紹了Go語(yǔ)言展現(xiàn)快速排序算法全過(guò)程的思路及代碼示例,文章最后作者還提到了對(duì)Quick Sort算法優(yōu)化的一些想法,需要的朋友可以參考下
    2016-04-04
  • Golang中fsnotify包監(jiān)聽(tīng)文件變化的原理詳解

    Golang中fsnotify包監(jiān)聽(tīng)文件變化的原理詳解

    Golang提供了一個(gè)強(qiáng)大的fsnotify包,它能夠幫助我們輕松實(shí)現(xiàn)文件系統(tǒng)的監(jiān)控,本文將深入探討fsnotify包的原理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Go語(yǔ)言MD5加密用法實(shí)例

    Go語(yǔ)言MD5加密用法實(shí)例

    這篇文章主要介紹了Go語(yǔ)言MD5加密用法,實(shí)例分析了Go語(yǔ)言MD5加密的使用技巧,需要的朋友可以參考下
    2015-03-03
  • Golang并發(fā)編程之main goroutine的創(chuàng)建與調(diào)度詳解

    Golang并發(fā)編程之main goroutine的創(chuàng)建與調(diào)度詳解

    這篇文章主要為大家詳細(xì)介紹了Golang并發(fā)編程中main goroutine的創(chuàng)建與調(diào)度,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • Go語(yǔ)言學(xué)習(xí)教程之聲明語(yǔ)法(譯)

    Go語(yǔ)言學(xué)習(xí)教程之聲明語(yǔ)法(譯)

    Golang 就是類(lèi)C的語(yǔ)法,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言學(xué)習(xí)教程之聲明語(yǔ)法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Go程序性能優(yōu)化及pprof使用方法詳解

    Go程序性能優(yōu)化及pprof使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Go程序性能優(yōu)化及pprof的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評(píng)論

新竹市| 志丹县| 米泉市| 大厂| 台湾省| 丽江市| 建始县| 枣阳市| 霍州市| 衡阳县| 临武县| 永泰县| 栖霞市| 莎车县| 乐平市| 贡嘎县| 乐亭县| 驻马店市| 进贤县| 谢通门县| 汝州市| 镇雄县| 宕昌县| 景德镇市| 泽库县| 疏附县| 灵璧县| 永吉县| 饶阳县| 吴堡县| 南部县| 梁山县| 沭阳县| 东海县| 库尔勒市| 岳阳县| 大港区| 衡南县| 广灵县| 关岭| 南和县|