2013-02-27 23 views
0

我在Java的嘗試這一命令MySQL的轉儲在java中不工作

executeCmd = DBConfig.dbLocation + "\\mysqldump -u " + mysqlUser + 
    " -p"+DBConfig.dbPass + " " + DBConfig.dbName + 
    " -r -opt>supervisorDbBkup.sql"; 

它給我的代碼1,而不是0

  String executeCmd = ""; 
    executeCmd = DBConfig.dbLocation+"\\mysqldump -u"+mysqlUser+ 
      " -p"+DBConfig.dbPass+" "+DBConfig.dbName+" -r -opt>supervisorDbBkup.sql"; 

    Process runtimeProcess =Runtime.getRuntime().exec(executeCmd); 
    int processComplete = runtimeProcess.waitFor(); 
    if(processComplete == 0){ 
     return "Backup taken successfully"; 
    } else { 
     return "Could not take mysql backup"; 
    } 

這是我運行命令:

   E:\program file\MySQL\MySQL Server 5.5\bin\mysqldump -uroot -p0502 dashboardsupervisor -r -opt>supervisorDbBkup.sql 

任何想法

+1

你使用哪個操作系統?顯示如何執行'executeCmd'。 – flash 2013-02-27 07:53:38

+0

win7,我已經粘貼了上面的代碼 – junaidp 2013-02-27 07:56:13

+0

DBConfig.dbLocation指向MYSQL_HOME/bin嗎? – shazin 2013-02-27 07:57:38

回答

1

你需要做的是打印出來的executeCmd的內容你已經建立之後,看到它所包含的內容,喜歡的東西:

Console.Out.WriteLine (executeCmd); 

如果該命令沒有在命令行工作完全一樣你已經構建了它,它不太可能在你的程序中工作。複製粘貼命令,確切地輸出,並嘗試從cmd shell執行它。

我懷疑你的問題在於可執行文件的路徑或其中一個選項。

如果不是這種情況,則需要注意重定向。重定向是一個外殼功能,可能無法用於Runtime.exec()調用。你會發現重定向位被作爲參數傳遞給可執行文件,它根本無法理解它。

通常的方式做,這是調用shell本身帶有參數告訴它如何運行命令和重定向得當,一樣的東西:

String[] cmd = {"/bin/sh", "-c", "/path/to/mysqldump blah blah >/tmp/tempout"}; 
Process p = Runtime.getRuntime().exec(cmd); 

(或Windows等價cmd /c)。

確保重定向處理正確(由shell本身),並且mysqldump可執行文件只獲取它理解的參數。

+0

如果我在shell中運行相同的命令,它工作正常..它在bin文件夾中創建一個新文件,在java中我期待它將新文件保存在war文件夾中.. – junaidp 2013-02-27 08:17:58

+0

那就是我所得到的:java.io.IOException:無法運行程序「E:/ program file/MySQL/MySQL Server 5.5/bin/sh」:CreateProcess error = 2,系統找不到指定的文件 – junaidp 2013-02-27 08:35:18

+0

它與這個代碼一起工作:String executeCmd =「」; executeCmd =「mysqldump -u」+ dbUser +「-p」+ dbPass +「」+ dbName +「-r backup.sql」; – junaidp 2013-02-27 08:40:41

1

請嘗試以下

executeCmd = "<Absolute Path to MYSQL>\bin" + "\\mysqldump -u " + mysqlUser + 
    " -p"+DBConfig.dbPass + " " + DBConfig.dbName + 
    " -r --opt > supervisorDbBkup.sql"; 

UPDATE:

-opt不是mysqldump的下面的選項是

--opt 
+0

會有單個\之前嗎? – junaidp 2013-02-27 08:13:02

+0

我正在嘗試使用--opt代碼,它現在給我代碼「6」.. – junaidp 2013-02-27 08:14:47

+0

使用runtimeProcess.getInputStream()打印runtimeProcess的輸出。以更好地理解異常 – shazin 2013-02-27 08:37:51

0

嘗試使用此命令 「C:\ Program Files文件\ MySQL \ MySQL Server 5.1 \ bin \ mysqldump -u username -pPASS_WORD database_name -r backup.sql「

請注意-u和username以及-p和password之間的空格(-p和password之間不應有空格)。 它爲我工作。