应用场景
1.实现通过go的传参方式备份恢复
2.go学会使用flag库的
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()
}