我正在尝试从Java应用程序恢复Mysql转储。 我使用这个代码:从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过程是否会在其操作完成后自行终止? –
因为你关闭了所有的流,他们现在阻止了一切。阅读JavaDoc的'进程' –
从终端,命令工作正常 – davidrgh