gpt4 book ai didi

java - 使用java备份mysql数据库而不丢失可移植性

转载 作者:行者123 更新时间:2023-11-29 08:45:51 26 4
gpt4 key购买 nike

我正在尝试在我用java开发的桌面应用程序之一上添加“创建备份”选项。我对此进行了很多搜索并找到了一些解决此问题的方法,但所有这些方法都破坏了一个重要的概念“可移植性”。很多人建议使用 mysqldump.exe (在 Windows 中)来执行此操作,但我想我需要知道 mysql 安装文件夹才能采取这种方法。下面是推荐的代码,顺便说一下无法正常运行(我不知道为什么,如果您注意到原因请告诉我)

private static String dbName = "shams";
private static String dbUserName = "root";
private static String dbPassword = "";

public static boolean backupDB(File file) {
String path = file.getPath();
if (!path.contains(".sql")) {
file = new File(path +".sql");
}

String executeCmd = "mysqldump -u " + dbUserName + " -p" + dbPassword + " --add-drop-database -B " + dbName + " -r " + file.getPath();
Process runtimeProcess;
try {

runtimeProcess = Runtime.getRuntime().exec(executeCmd);
int processComplete = runtimeProcess.waitFor();

if (processComplete == 0) {
System.out.println("Backup created successfully");
runtimeProcess.destroy();
return true;
} else {

System.out.println("Could not create the backup");
}


} catch (Exception ex) {
ex.printStackTrace();


}

return false;
}

有些人建议简单地将数据库复制到某个位置。

那么..我应该以一种简洁的方式对此做些什么呢?有可用的第三方jar吗?

--编辑--

给定代码的问题是,当您没有用户(在本例中为 root 用户)的密码时,您不应在命令中提及密码。命令应该是这样的:String executeCmd = "mysqldump -u " + dbUserName + " --add-drop-database -B " + dbName + " -r " + file.getPath();

而且你也不需要指定mysql的安装文件夹。上面的代码按原样工作。

最佳答案

这个问题有纯Java的解决方案;例如

(我还没有检查过其中任何一个,看看它们是否做得不错......YMMV。)

但是,我对使用第 3 方转储程序持谨慎态度,因为您最终可能会得到无法正确恢复的转储。

是的,您确实需要知道 mysqldump 程序的路径。但这可以使用合理的默认值和/或配置文件中的条目来处理。你的“破坏可移植性”评论简直是小题大做。

<小时/>

我看不出您的代码有任何明显的错误。我建议您从 mysqldump 捕获“标准错误”和“标准输出”并查看其内容。

  • 可能是因为凭据不正确或输出目录不存在。
  • 也许您的其中一个选项不正确。 (这真的是你应该如何使用 -B 选项吗?)

关于java - 使用java备份mysql数据库而不丢失可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12544736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com