在Go中如何利用mysqldump备份还原数据

本文介绍了如何使用Go语言编写脚本,通过环境变量获取数据库连接信息,进行Mysqldump备份并恢复数据库,包括设置命令行参数和处理错误情况。
摘要由CSDN通过智能技术生成

1、环境介绍

确保运行环境中已经正确安装MySQL的mysqldump,如果没有安装,请移步官网安装MySQL。

2、Mysqldump备份



package main

import (
    "os"
	"os/exec"
	"log"
)

func getEnvDefault(key, defVal string) string {
	val, ok := os.LookupEnv(key)
	if ok {
		return val
	}
	return defVal
}

func main() {
    // 读取数据库连接参数
    var (
			dbUser         = getEnvDefault("DB_USER", "root")
			dbUserPassword = getEnvDefault("DB_PASSWORD", "password")
			dbName         = getEnvDefault("DB_NAME", "dbname")
			dbHost         = getEnvDefault("DB_HOST", "localhost")
			dbPort         = getEnvDefault("DB_PORT", "3306")
		)

	// 设置mysqldump命令参数
	cmd := exec.Command("mysqldump", "-h", dbHost, "-P", dbPort, "-u", dbUser, "-p"+dbUserPassword, dbName)

	// 创建输出文件
	outfile, err := os.Create("backup.sql")
	if err != nil {
		log.Fatalf("创建 backup.sql 失败: %v", err)
	}
	defer outfile.Close()

	// 将命令的标准输出连接到文件
	cmd.Stdout = outfile

	// 执行mysqldump命令
	if err := cmd.Run(); err != nil {
		log.Fatalf("mysqldump 运行异常: %s\n", err)
	}

	log.Println("备份成功!")
}

3、还原备份

package main

import (
    "os"
	"os/exec"
	"log"
)

func getEnvDefault(key, defVal string) string {
	val, ok := os.LookupEnv(key)
	if ok {
		return val
	}
	return defVal
}

func main() {
    // 读取数据库参数
    var (
			dbUser         = getEnvDefault("DB_USER", "root")
			dbUserPassword = getEnvDefault("DB_PASSWORD", "password")
			dbName         = getEnvDefault("DB_NAME", "dbname")
			dbHost         = getEnvDefault("DB_HOST", "localhost")
			dbPort         = getEnvDefault("DB_PORT", "3306")
		)
	
    // 构建mysqldump命令
    recoverSQL := fmt.Sprintf("MYSQL_PWD=%s mysql -h %s -P %s -u%s %s < %s",                 dbUserPassword, dbHost, dbPort, dbUser, dbName, "/users/root/backup/backup.sql")
	// 使用bash来执行带有重定向的命令
	cmd := exec.Command("bash", "-c", recoverSQL)
	if err := cmd.Run(); err != nil {
		log.Fatalf("数据恢复失败:%s", err)
	}

	// 执行命令
	if err := cmd.Run(); err != nil {
		log.Fatalf("mysql failed with %s\n", err)
	}

	log.Println("数据库恢复成功!")
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值