2012-09-28 47 views
1
String[] executeCmd = new String[] { "mysql", "-u",DB_USER,"-p"+DB_PASSWORD,DB_NAME, " < ", "\""+FileName+"\"" }; 

Process runtimeProcess = Runtime.getRuntime().exec(executeCmd); 
int processComplete = runtimeProcess.waitFor(); 
System.out.println("processComplete: " + processComplete); 

这是我使用过的代码。程序在调用“waitFor()”方法时挂起。MySql备份不起作用

如何解决这个问题?

+0

这听起来不错,'w aitFor()'等待mysqldump完成运行,这对于大型数据库可能需要几个小时。 – Dai

+0

当你从命令行手动运行时,它是否工作 – Elbek

+0

@elber:它在命令提示符下手动工作。 顺便说一句,它是一个带有单表的小型数据库 – Gapchoos

回答

0
String[] command = new String[]{"mysql", Constants.DB_NAME, "-u" + Constants.DB_USER, "-p" + Constants.DB_PASSWORD, "-e", " source "+FileName }; 

    try { 
      Process runtimeProcess = Runtime.getRuntime().exec(command); 
      int processComplete = runtimeProcess.waitFor(); 
      if (processComplete == 0) 
      { 
       System.out.println("DatabaseManager.restore: Restore Successfull"); 

      } 
      else 
      { 
       System.out.println("DatabaseManager.restore: Restore Failure!"); 
      } 

     return true; 

    } 

    catch (final Exception ex) 
    { 
     Application.showErrorInConsole(ex); 
     NmsLogger.writeErrorLog("Database Restore failed ", ex.toString()); 
     NmsLogger.writeDebugLog(ex); 
     return false; 

    } 

上面的代码为我工作得很好:)

5

你所需要的参数后添加空格,不要使用数组

String executeCmd = "mysqldump ", " -u ",DB_USER," -p " + DB_PASSWORD, + " " + DB_NAME, " < ", "\""+FileName+"\"" ; 

和清洁的方法是使用String.Format()

String executeCmd = String.Format("mysqldump -u %s -p %s %s < \"%s\"", DB_USER, DB_PASSWORD, DB_NAME, FileName) 
+0

你确定吗? http://stackoverflow.com/questions/3695230/how-to-use-java-string-format。 'String.format(“%s支持它!”,“java”)' – Elbek

+0

@elber我已经编辑了答案。我显示的原始'string.format'在'C#' –

+0

你说它不支持,不像C#,这就是我发布的原因。 – Elbek

1
Backup: 
/******************************************************/ 
//Database Properties 
/******************************************************/ 
String dbName = “dbName”; 
String dbUser = “dbUser”; 
String dbPass = “dbPass”; 
/***********************************************************/ 
// Execute Shell Command 
/***********************************************************/ 
String executeCmd = “”; 
executeCmd = “mysqldump -u “+dbUser+” -p”+dbPass+” “+dbName+” -r backup.sql”; 
} 
Process runtimeProcess =Runtime.getRuntime().exec(executeCmd); 
int processComplete = runtimeProcess.waitFor(); 
if(processComplete == 0){ 
out.println(“Backup taken successfully”); 
} else { 
out.println(“Could not take mysql backup”); 
} 
Restore: 
/******************************************************/ 
//Database Properties 
/******************************************************/ 
String dbName = “dbName”; 
String dbUser = “dbUser”; 
String dbPass = “dbPass”; 
/***********************************************************/ 
// Execute Shell Command 
/***********************************************************/ 
String executeCmd = “”; 
executeCmd = new String[]{“/bin/sh”, “-c”, “mysql -u” + dbUser+ ” -p”+dbPass+” ” + dbName+ ” < backup.sql” }; 
} 
Process runtimeProcess =Runtime.getRuntime().exec(executeCmd); 
int processComplete = runtimeProcess.waitFor(); 
if(processComplete == 0){ 
out.println(“success”); 
} else { 
out.println(“restore failure”); 
}