专业编程基础技术教程

网站首页 > 基础教程 正文

通过go脚本编写自动化备份脚本(minio)

ccvgpt 2024-08-08 13:03:17 基础教程 16 ℃

应用场景

1.实现通过go的传参方式备份恢复

2.go学会使用flag库的

通过go脚本编写自动化备份脚本(minio)

3.go函数的传参

4.go脚本实现 minio备份恢复

脚本依赖

1.服务器安装mc命令

脚本使用方法

//进行编译
root@wadequ-ThinkPad-L13:/opt/go/gorm-study# go build minio_back.go 
root@wadequ-ThinkPad-L13:/opt/go/gorm-study# ls
go.mod  go.sum  main.go  minio_back  minio_back.go  select.go
//查看操作参数方法
root@redis-cluster:~/minio-bak# ./minio_back -h
Usage: ./minio_back -bucket_name devminio/bucketname -folder /tmp -buck_type restore/buckup
  -buck_type string
        请输入你的备份类型buckup/restore (default "buckup")
  -bucket_name string
        请输入存储通的名称
  -folder string
        请输入你的备份或者恢复目录 (default "/tmp")
//执行备份以及恢复的命令
root@redis-cluster:~/minio-bak# ./minio_back -bucket_name devminio/test -folder /root/minio-bak-buck_type buckup
root@redis-cluster:~/minio-bak# ./minio_back -bucket_name devminio/test -folder /root/minio-bak -buck_type restore


go脚本

package main

import (
	"flag"
	"fmt"
	"os"
	"os/exec"
)

type bucketInfo struct {
	Bucket string `json:"bucket"`
	Folder	string `json:"folder"`
}
func main() {
	//命令行参数
	var bucket_name string
	var folder string
	var buck_type string
	flag.StringVar(&bucket_name,"bucket_name","","请输入存储通的名称")
	flag.StringVar(&folder,"folder","/tmp","请输入你的备份或者恢复目录")
	flag.StringVar(&buck_type,"buck_type","buckup","请输入你的备份类型buckup/restore")

	flag.Usage = func() {
		fmt.Fprintf(os.Stderr, "Usage: %s -bucket_name devminio/bucketname -folder /tmp -buck_type restore/buckup\n", os.Args[0])
		flag.PrintDefaults()
	}
	flag.Parse()
	if buck_type == "buckup"{
		info := bucketInfo{bucket_name,folder}
		error := backupMinioDate(info)
		if error !=nil {
			fmt.Println("执行备份任务失败:",error)
		}else {
			fmt.Println("执行备份任务成功")
		}

	}else if buck_type == "restore" {
		info := bucketInfo{bucket_name,folder}
		error := restoreMinioData(info)
		if error !=nil {
			fmt.Println("执行恢复任务失败:",error)
		}else {
			fmt.Println("执行恢复任务成功")
		}

	}

}

//实现备份
func backupMinioDate(info bucketInfo) error {
	fmt.Println("bucket名称:",info.Bucket,"存储目录为:",info.Folder)
	cmd := exec.Command("mc","mirror",info.Bucket,info.Folder)
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr

	fmt.Println("Backing up miniO data")
	return cmd.Run()
}
//实现还原
func restoreMinioData(info bucketInfo) error {
	fmt.Println("bucket名称:",info.Bucket,"恢复的存储目录为:",info.Folder)
	cmd := exec.Command("mc","mirror",info.Folder,info.Bucket)
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	fmt.Println("Restoring MinIO data...")
	return cmd.Run()
}

Tags:

最近发表
标签列表