package main import ( "fmt" "io/ioutil" "log" "os" "os/exec" "time" ) var logger *log.Logger func main() { // mysql 备份 var db_back_file string timeUnix := time.Now().Unix() //单位s,打印结果:1491888244 formatTimeStr := time.Unix(timeUnix, 0).Format("2006-01-02") // fmt.Println(formatTimeStr) // mysql执行环境路径 mysqldump := "D:\\mysql-8.0.32-winx64\\bin\\mysqldump.exe" // 备份环境路径 db_back_file = "D:\\mysql-8.0.32-winx64\\data_back\\" + formatTimeStr + ".sql" // 执行命令 cmd := exec.Command(mysqldump, "-u", "root", "-p密码", "--databases", "-h服务器ip", "-P端口", "数据库名", "-r", db_back_file) // logger.Println(cmd) stdout, err := cmd.StdoutPipe() if err != nil { logger.Println(err) fmt.Println("Failed to create pipe: ", err) return } cmd.Start() bytes, _ := ioutil.ReadAll(stdout) //logger.Println(string(bytes)) fmt.Println(string(bytes)) //cmd.Wait() } func init() { //指定路径的文件,无则创建 var logfiles string // 定义日志文件目录 timeUnix := time.Now().Unix() //单位s,打印结果:1491888244 formatTimeStr := time.Unix(timeUnix, 0).Format("2006-01-02") logfiles = formatTimeStr + "_log.log" logFile, err := os.OpenFile(logfiles, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if err != nil { panic(err) } logger = log.New(logFile, "[info]", log.Ldate|log.Ltime) // OpenFile = 功能:打开文件 // 函数原型:func OpenFile(name string, flag int, perm FileMode) (file *File, err error) // 返回值: // 成功,返回的文件对象 // 失败,err错误底层类型是*PathError // 参数解释: // name:文件路径及文件名 // flag:文件操作类型码 // perm:文件模式 // 二参码值 释义 // O_RDONLY 只读模式打开文件 // O_RDONLY 只读模式打开文件 // O_WRONLY 只写模式打开文件 // O_RDWR 读写模式打开文件 // O_APPEND 写操作时将数据附加到文件尾部 // O_CREATE 如果不存在将创建一个新文件 // O_EXCL 和O_CREATE配合使用,文件必须不存在 // O_SYNC 打开文件用于同步I/O // O_TRUNC 如果可能,打开时清空文件 // flag 码值 释义 // 0666 任何人都可读写,不可执行 // 0777 覆盖所有Unix权限位(用于通过&获取类型位) //———————————————— // log.New // 功能:创建一个Logger对象 // 函数原型:func New(out io.Writer, prefix string, flag int) *Logger // 返回值: // 成功,返回的文件对象 // 失败,err错误底层类型是*PathError // 参数解释: // out:写入文件的对象 // prefix:添加到每一条日志前面的字符串 // flag:日志的属性 // flag码值 释义 // Ldate 日期:2009/01/23 // Ltime 时间:01:23:23 // Lmicroseconds 微秒分辨率:01:23:23.123123(用于增强Ltime位) // Llongfile 文件全路径名+行号: /a/b/c/d.go:23 // Lshortfile 文件无路径名+行号:d.go:23(会覆盖掉Llongfile) // LstdFlags 标准logger的初始值 // ———————————————— }
编译exe文件:
go mod init mysql_back
go mod tidy
go mod vendor
// 以上三步没有用到第三方包引入可以不用,如果自己在以上代码上进行调整引入到第三方包可以用,但是必须开启mode
go build -o go-mysql-back.exe mysql_back.go