2013-01-07 40 views
1

我正在執行Java類的mysqldump命令,但我不斷收到標題中提到的錯誤。Java exec()mysqldump錯誤:找不到表「>」

這是我使用的代碼:

 Process runtimeProcess = Runtime.getRuntime().exec("mysqldump -uroot -pmypassword valo > /etc/valbu.sql"); 
     int processComplete = runtimeProcess.waitFor(); 
     if(processComplete == 0){ 
      System.out.println("Backup taken successfully"); 
     } else { 
      InputStream stderr = runtimeProcess.getErrorStream(); 
      InputStreamReader isr = new InputStreamReader(stderr); 
      BufferedReader br = new BufferedReader(isr); 
      String line = null; 
      System.out.println("<ERROR>"); 
      while ((line = br.readLine()) != null) 
       System.out.println(line); 
      System.out.println("</ERROR>"); 
      System.out.println("Could not take mysql backup"); 
     } 

看起來他不明白,>不是一個表,但一個命令轉儲。

+0

不要傳遞憑據作爲命令行參數!它們可能對主機上的其他用戶可見(通過'ps -o args')。相反,將它們作爲環境變量或stdin傳遞。 – 2013-01-07 11:05:44

回答

1

這不會起作用,因爲Runtime.exec()不會調用一個shell,並>是一個shell重定向。

因此,要麼使用像{ "/bin/bash", "-c", "thescripthere" }這樣的數組(不推薦),要麼使用ProcessBuilder

+0

非常感謝,數組命令工作正常。由於它不是reccomended,我想進入processbuilder。我會對此進行一些研究,非常感謝! – Memme

0

嘗試使用result-file選項mysqldump命令,而不是重定向操作>

mysqldump -uroot -pmypassword valo --result-file=/etc/valbu.sql