2017-11-07 20:07:56

xorm 备份sql文件还原失败解决记录

起因

  • 今天被通知发现一个网站没有显示数据

  • 查看原因,服务器上被新部署了php网站如下

    alt

  • 部署的为某CMS

    alt

  • 集成环境为phpStudy如下

    alt

  • 检查发现 mysql ,nginx 被替换,原来数据库数据消失(被删除)
  • 准备采用自动备份的数据库文件(每一周备份一次保存最近一个月的数据)进行还原 发现无法直接利用xorm所备份的sql文件,错误提示为语法错误

    其中包括采用xorm自带的还原方式

  • 写了一段代码fix备份所产生的语法问题

代码如下

package main

import (
    "bytes"
    "flag"
    "fmt"
    "io/ioutil"
)

var (
    in  string
    out string
)

func init() {
    flag.StringVar(&in, `i`, ``, `Use -i <sql file src path eg:in.sql>`)
    flag.StringVar(&out, `o`, ``, `Use -o <sql file dest path eg:out.sql>`)
}

func main() {
    flag.Parse()
    if len(in) == 0 {
        fmt.Println(`Use -i <sql file src path eg:in.sql>`)
        return
    }
    if len(out) == 0 {
        fmt.Println(`Use -o <sql file dest path eg:out.sql>`)
        return
    }
    buf, err := ioutil.ReadFile(in)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    buf = bytes.Replace(buf, []byte("\r\n"), []byte(" "), -1)
    buf = bytes.Replace(buf, []byte(" +0800 CST"), []byte(""), -1)
    err = ioutil.WriteFile(out, buf, 0777)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
}

使用方式

fix.exe -i back.sql -o out.sql

本文链接:https://blog.zxysilent.com/post/fix-xorm-bak-sql.html

-- EOF --

Comments