golang实现mysql实例存活检查及全量备份是否完成检查工具开发

在这里插入图片描述

系列文章目录

golang实现mysql全量备份工具
golang命令行框架cobra



前言

在顶部文章中,通过golang编写了一个mysql的全量备份工具,经过验证备份工具没有问题,可以正常使用。但是在正式的生产环境中,作为运维的你怎么确认昨天的备份是成功的?最普通的方式是登上服务器手动查看,这种方式在当前的自动化运维中显得有些low了。因为生产环境中避免不了prometheus监控的接入,因此,为了解决手动确认备份成功的问题,并结合Prometheus实现备份检查告警,通过golang的cobra命令行框架编写一个备份检查工具脚本和mysql实例存活探测脚本来实现。Cobra 的命令行工具 cobra-cli 进一步提高了编写命令行程序的效率,非常推荐使用它来实现命令行工具的开发,可以加快开发速度。


一、引入cobra命令行框架

因为要开发的工具最终是以二进制命令的方式在linux服务器中执行,恰好golang的标准库cobra满足该条件,因此使用它为基础实现备份检查和实例存活检查工具的开发

在阅读下方的开发脚本过程前,先阅读顶部的第二篇文章golang命令行框架cobra,
对cobra的概念和命令使用有个整体了解后,阅读下方代码会更加容易

二、工具开发过程

1.引入库

命令如下(示例):

[root@python2 ~]# go get -u -v github.com/spf13/cobra      

[root@python2 ~]# go install github.com/spf13/cobra-cli@latest

2.cobra-cli初始化项目

[root@python2 ~]# cobra-cli init mysql_golang_tools
[root@python2 ~]# tree mysql_golang_tools
├── mysql_golang_tools
│   ├── cmd
│   │   └── root.go
│   ├── LICENSE
│   └── main.go 

3.修改cmd/root.go文件

因为备份检查和存活检查工具是分别写在不同的文件中的,所以在root.go文件中将不必要的代码先删除掉

代码如下(示例):

/*
Copyright © 2024 NAME HERE <EMAIL ADDRESS>
*/
package cmd

import (
	"os"

	"github.com/spf13/cobra"
)

// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
   
	Use:   "mysql_golang_tools",
	Short: "include mysql backupfile check and mysql alive check",
	Long:  `这是一个检查mysql 全量备份及mysql实例存活的golang脚本`,

	//Run: func(cmd *cobra.Command, args []string) { fmt.Println("hello cobra") },
}

// Execute adds all child commands to the root command and sets flags appropriately.
// 命令执行入口处
func Execute() {
   
	err := rootCmd.Execute()
	if err != nil {
   
		os.Exit(1)
	}
}

4.编写备份检查代码

mysql全量备份可参考顶部文章golang实现mysql全量备份
采用上述工具备份完成后,备份日志及备份存放目录截图如下

代码功能(示例):

1、检查指定备份存放目录下是否存在对应的备份文件
2、检查指定备份日志文件中是否包含‘compeleted OK!’字样,如果包含则说明备份是成功且完整的,反之,备份失败
3、执行构建好的二进制程序后,返回值是 mysqlbackupcheck,port=xxxx status=0/1i
4、因为这个返回值后期在对接Prometheus的自定义监控时会使用到,这个后续再说
5、status=0i代表备份失败,反之status=1i代表备份成功。只有这两种状态

代码如下(示例):

//backupFileCheck.go
package cmd

import (
	"bufio"
	"fmt"
	"os"
	"path/filepath"
	"strings"
	"time"

	"github.com/spf13/cobra"
)

var mysqlBackupDirectory, mysqlBackupLogDir string

// 备份文件检查子命令入口
var backupFileCheck = &cobra.Command{
   
	Use:   "mysqlbackupcheck",
	Short: "这是mysql全量备份文件检查工具",
	Args:  cobra.ArbitraryArgs, //接收任意参数
	Run: func(cmd *cobra.Command, args []string) {
   
		CheckBackup(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值