Golang远程MySQL数据库的备份与恢复

3 篇文章 0 订阅
1 篇文章 0 订阅

/**
 *
 * 备份MySql数据库
 * @param host:         数据库地址: 
 * @param port:         端口: 
 * @param user:         用户名: 
 * @param password:     密码: 
 * @param databaseName: 需要备份的数据库名:
 * @param tableName:    需要备份的表名:
 * @param sqlPath:      备份SQL存储路径:
 * @return backupPath   返回备份路径
 *
 */

const( BackupPath  = "/备份所在文件夹" )
//备份
func BackupMySqlDb(host, port, user, password, databaseName, sqlPath string) (error, string) {
	//获得一个当前的时间戳
	now := time.Now().Format("20060102150405")
	var backupPath string
	// 判断文件夹不存在时自动创建
	if !utils.FileExists(BackupPath) {
		if err := os.MkdirAll(BackupPath, os.ModePerm); err != nil {
			return err, ""
		}
	}
	//设置备份文件的路径
	backupPath = sqlPath + databaseName + "_" + now + ".sql"
	mysqldumpCmd := `mysqldump -h ` + host + ` -P ` + port + ` -u` + user + ` -p` + password + ` --databases ` + databaseName + ` --ignore-table=` + databaseName + `.logs` + ` >` + backupPath
	//--ignore-table=库名.表名 表示备份忽略该表 
	if err := ExecutiveCommand(mysqldumpCmd); err != nil {
		return err, ""
	}
	return nil, backupPath
}

//恢复数据表
func RecoverMySqlDb(host, port, user, password, databaseName, backupPath string) error {
	//恢复表 mysql -h[地址] -P[端口] -u[用户名] -p[密码] [数据库名] <[备份文件]
	mysqldumpCmd := `mysql -h` + host + ` -P` + port + ` -u` + user + ` -p` + password + ` ` + databaseName + ` <` + backupPath
	if err := ExecutiveCommand(mysqldumpCmd); err != nil {
		return err
	}
	return nil
}

func ExecutiveCommand(command string) error {
	//需要执行命令:command
	cmd := exec.Command("/bin/bash", "-c", command)
	// 获取管道输入
	output, err := cmd.StdoutPipe()
	if err != nil {
		return err
	}
	if err := cmd.Start(); err != nil {
		return err
	}
	_, err = ioutil.ReadAll(output)
	if err != nil {
		return err
	}
	if err := cmd.Wait(); err != nil {
		return err
	}
	return nil
}
//检查文件或文件夹是否存在
func FileExists(path string) bool {
	_, err := os.Stat(path) //os.Stat获取文件信息
	if err != nil {
		return os.IsExist(err)
	}
	return true
}


备份表格式
mysqldump -h[地址] -P[端口] -u[用户名] -p[密码] [–databases] [数据库名] [–ignore-table=库名.忽略的表] <[备份文件]

恢复表格式
mysql -h[地址] -P[端口] -u[用户名] -p[密码] [数据库名] <[备份文件]

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值