|
|
@@ -2,8 +2,11 @@ package main
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
+ "github.com/astaxie/beego"
|
|
|
+ "io/ioutil"
|
|
|
"log"
|
|
|
"os"
|
|
|
+ "os/exec"
|
|
|
"os/signal"
|
|
|
"runtime"
|
|
|
"strconv"
|
|
|
@@ -74,6 +77,9 @@ func main() {
|
|
|
//定期清理已完成任务信息
|
|
|
go ClearSuccessfulTask()
|
|
|
|
|
|
+ // 备份数据库 定时任务
|
|
|
+ go BackupDatabase()
|
|
|
+
|
|
|
// 监听收到的信号
|
|
|
interrupt := make(chan os.Signal, 1)
|
|
|
signal.Notify(interrupt, os.Interrupt)
|
|
|
@@ -140,7 +146,6 @@ func main() {
|
|
|
}
|
|
|
// label:
|
|
|
}
|
|
|
- // 备份数据库 定时任务
|
|
|
log.Println("===============Service_down===============")
|
|
|
//conn.Close()
|
|
|
}
|
|
|
@@ -412,4 +417,88 @@ func echo() {
|
|
|
break
|
|
|
}
|
|
|
}*/
|
|
|
+}
|
|
|
+
|
|
|
+// 定期清理任务表已完成信息
|
|
|
+func BackupDatabase() {
|
|
|
+ log.Println("定时备份数据库启动>>>>>>>>>>>>>>>>>>>")
|
|
|
+ cron := cron.New()
|
|
|
+ //每天0时备份数据库
|
|
|
+ // * * * * * command
|
|
|
+ //minute hour day month week command
|
|
|
+ tick := "0 0 0 * * ?"
|
|
|
+ err = cron.AddFunc(tick, func() {
|
|
|
+ BackupMySqlDb("")
|
|
|
+ if err != nil {
|
|
|
+ log.Println("数据库备份失败:", err)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ cron.Start()
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * 备份MySql数据库
|
|
|
+ * @param host: 数据库地址:
|
|
|
+ * @param port: 端口:
|
|
|
+ * @param user: 用户名:
|
|
|
+ * @param password: 密码:
|
|
|
+ * @param databaseName: 需要被分的数据库名: biobank_genepoint_new
|
|
|
+ * @param tableName: 需要备份的表名:
|
|
|
+ * @param sqlPath: 备份SQL存储路径: /home/workservices/bank/
|
|
|
+ * @return backupPath
|
|
|
+ *
|
|
|
+ */
|
|
|
+func BackupMySqlDb(tableName string) (error,string) {
|
|
|
+ //定义Cmd结构体对象指针
|
|
|
+ var cmd *exec.Cmd
|
|
|
+ host := beego.AppConfig.String("db::host")
|
|
|
+ port := beego.AppConfig.String("db::db_port")
|
|
|
+ user := beego.AppConfig.String("db::user")
|
|
|
+ password := beego.AppConfig.String("db::pwd")
|
|
|
+ databaseName := beego.AppConfig.String("db::name")
|
|
|
+ sqlPath := "/home/workservices/bank/"
|
|
|
+ //sqlPath := "D:/backup/"
|
|
|
+ //在这里如果没有传输表名,那么将会备份整个数据库,否则将只备份自己传入的表
|
|
|
+ if tableName == "" {
|
|
|
+ cmd = exec.Command("mysqldump", "--opt", "-h"+host, "-P"+port, "-u"+user, "-p"+password, databaseName)
|
|
|
+ } else {
|
|
|
+ cmd = exec.Command("mysqldump", "--opt", "-h"+host, "-P"+port, "-u"+user, "-p"+password, databaseName, tableName)
|
|
|
+ }
|
|
|
+
|
|
|
+ //StdinPipe方法返回一个在命令Start后与命令标准输入关联的管道。
|
|
|
+ stdout, err := cmd.StdoutPipe()
|
|
|
+ if err != nil {
|
|
|
+ log.Println(err)
|
|
|
+ return err,""
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := cmd.Start(); err != nil {
|
|
|
+ log.Println(err)
|
|
|
+ return err,""
|
|
|
+ }
|
|
|
+
|
|
|
+ bytes, err := ioutil.ReadAll(stdout)
|
|
|
+ if err != nil {
|
|
|
+ log.Println(err)
|
|
|
+ return err,""
|
|
|
+ }
|
|
|
+ //获得一个当前的时间戳
|
|
|
+ now := time.Now().Format("20060102150405")
|
|
|
+ var backupPath string
|
|
|
+
|
|
|
+ //设置我们备份文件的名字
|
|
|
+ if tableName == "" {
|
|
|
+ backupPath = sqlPath+databaseName+"_"+now+".sql"
|
|
|
+ } else {
|
|
|
+ backupPath = sqlPath+databaseName+"_"+tableName+"_"+now+".sql"
|
|
|
+ }
|
|
|
+ //写入文件并设置文件权限
|
|
|
+ err = ioutil.WriteFile(backupPath, bytes, 0644)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ log.Println(err)
|
|
|
+ return err,""
|
|
|
+ }
|
|
|
+ return nil,backupPath
|
|
|
}
|