【发布时间】:2012-10-28 23:54:06
【问题描述】:
我正在尝试从 Java 应用程序恢复 Mysql 转储。 我正在使用此代码:
Runtime rt = Runtime.getRuntime();
try {
comando = "mysql -u root -ppass -e \"source " + path + "\\sql\\backup.sql\" legapelis" ;
Process proceso = rt.exec(comando);
System.out.println("ejecutando");
System.out.println(comando);
proceso.getInputStream().close();
proceso.getOutputStream().close();
proceso.getErrorStream().close();
completado = proceso.waitFor();
if (completado != 0) {
System.out.println("error");
addActionError(getText("backup.errcopia") + ": " + String.valueOf(completado));
consultarCopias();
return "error";
}
System.out.println("fin");
} catch (Exception e) {
addActionError(e.getLocalizedMessage());
consultarCopias();
return "error";
}
但是这段代码打开的Mysql进程永远不会结束。它挂起,如果我杀死它,Mysql 服务将停止正常工作(我必须重新启动它)。我尝试了很多代码:关闭流,读取它......但结果相同。
有什么提示吗?
如果我的英语不太好,请见谅。
谢谢
Ps:我尝试将 -v 选项添加到命令中以从输入流中读取它。它开始读取,但随后又挂起(并且没有完成读取命令的输出:它突然停止)
【问题讨论】:
-
如果您要在终端中运行该命令,mysql 进程在完成操作后通常会自行终止吗?
-
因为您关闭了所有流,而它们现在阻止了所有内容。阅读
Process的 JavaDoc -
从终端,该命令工作正常
-
我相信这篇文章的答案将解决您的问题。 stackoverflow.com/questions/13008526/…
-
EMAcOttawa,现在我通过Java方法分析SQL文件解决了它;但我会看看。谢谢。
标签: java mysql process runtime dump