5
0
Эх сурвалжийг харах

基点定时任务备份数据库

xuchl 4 жил өмнө
parent
commit
3c7a17a585

+ 90 - 1
src/dashoo.cn/genepoint_srv/main.go

@@ -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
 }