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("数据库恢复成功!")
}