main
黄海 7 months ago
parent 8afa83dfe3
commit a0c0fb9fd4

@ -1,41 +1,52 @@
package com.dsideal.YunXiaoTools; package com.dsideal.YunXiaoTools;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ZipUtil;
import com.dsideal.YunXiaoTools.Utils.ObsUtil;
import com.jfinal.kit.PropKit; import com.jfinal.kit.PropKit;
import java.io.*; import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class MySQLBackup { public class MySQLBackup {
//数据库连接串
public static String jdbcUrl; public static String jdbcUrl;
//数据库用户名
public static String user; public static String user;
//数据库密码
public static String password; public static String password;
/** /**
* MySQL * MySQL
*/ */
public String backup() { public String backup() {
PropKit.clear();
PropKit.use("application.properties");
jdbcUrl = PropKit.get("read.jdbcUrl");
user = PropKit.get("read.user");
password = PropKit.get("read.password");
// 获取配置 // 获取配置
String host = getHostFromJdbcUrl(jdbcUrl); String host = getHostFromJdbcUrl(jdbcUrl);
String port = getPortFromJdbcUrl(jdbcUrl); String port = getPortFromJdbcUrl(jdbcUrl);
String database = getDatabaseFromJdbcUrl(jdbcUrl); String database = getDatabaseFromJdbcUrl(jdbcUrl);
// 生成备份文件名 // 生成备份文件名
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
String backupFileName = database + "_" + timestamp + ".sql"; String backupFileName = timestamp + ".sql";
// 创建临时目录 // 创建临时目录
String tempDir = System.getProperty("java.io.tmpdir"); String tempDir = System.getProperty("java.io.tmpdir");
String backupPath = tempDir + File.separator + backupFileName; String backupPath = tempDir + backupFileName;
try { try {
// 获取mysqldump路径 // 获取mysqldump路径
String mysqldumpPath = getMySQLDumpPath(); String mysqldumpPath = getMySQLDumpPath();
// 构建命令(不包含密码) // 构建命令(不包含密码)
ProcessBuilder pb = new ProcessBuilder( ProcessBuilder pb = new ProcessBuilder(
mysqldumpPath, mysqldumpPath,
@ -56,10 +67,8 @@ public class MySQLBackup {
"-r", "-r",
backupPath backupPath
); );
// 设置环境变量传递密码 // 设置环境变量传递密码
pb.environment().put("MYSQL_PWD", password); pb.environment().put("MYSQL_PWD", password);
// 执行备份命令 // 执行备份命令
Process process = pb.start(); Process process = pb.start();
@ -72,16 +81,14 @@ public class MySQLBackup {
System.out.println("备份进度: " + line); System.out.println("备份进度: " + line);
} }
} }
// 等待命令执行完成 // 等待命令执行完成
int exitCode = process.waitFor(); int exitCode = process.waitFor();
if (exitCode == 0) { if (exitCode == 0) {
System.out.println("数据库备份成功: " + backupPath); System.out.println("数据库备份成功: " + backupPath);
return backupPath; return backupPath;
} else { } else {
throw new RuntimeException("数据库备份失败,错误信息:\n" + errorOutput.toString()); throw new RuntimeException("数据库备份失败,错误信息:\n" + errorOutput);
} }
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException("备份过程出错: " + e.getMessage(), e); throw new RuntimeException("备份过程出错: " + e.getMessage(), e);
} }
@ -138,18 +145,27 @@ public class MySQLBackup {
} }
public static void main(String[] args) { public static void main(String[] args) {
PropKit.use("application.properties");
jdbcUrl = PropKit.get("read.jdbcUrl");
user = PropKit.get("read.user");
password = PropKit.get("read.password");
try { try {
MySQLBackup backup = new MySQLBackup(); MySQLBackup backup = new MySQLBackup();
String backupFile = backup.backup(); String sourceFile = backup.backup();
System.out.println("备份文件已生成: " + backupFile);
//压缩成ZIP文件
// 如果需要可以进一步将文件上传到OBS String zipFile = sourceFile.replace(".sql", ".zip");
// ... 上传代码 ... ZipUtil.zip(sourceFile, zipFile);
//文件名称
String fileName = new File(zipFile).getName();
// 上传到华为云OBS
String key = "HuangHai/YunXiao/" + fileName;
ObsUtil.uploadToObs(zipFile, key);
//清理此路径下旧的文件
String url = "https://dsideal.obs.cn-north-1.myhuaweicloud.com/" + key;
System.out.println(url);
//清理
FileUtil.del(sourceFile);
FileUtil.del(zipFile);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
System.err.println("备份失败: " + e.getMessage()); System.err.println("备份失败: " + e.getMessage());

Loading…
Cancel
Save