簡體   English   中英

mysqldump從java運行時返回代碼6,但同樣的命令從命令行運行正常

[英]mysqldump returns code 6 when run from java, but the same command works fine from command line

當我通過Runtime.getRuntime從Java運行相同的命令時,我得到返回代碼6.相同的命令在命令行中正常工作:

process = Runtime.getRuntime().exec(mysqldumpCommand);
int processComplete = process.waitFor();

對於這兩個命令,當從java運行並且沒有轉儲時,我得到返回代碼6。 從命令行工作正常(我在本地環境上沒有密碼)

mysqldump --user=root --password= --host=localhost dbname > c:\temp\dumpfile.sql
mysqldump --user=root --password="" --host=localhost dbname > c:\temp\dumpfile.sql

故意輸入錯誤密碼時,我會在java中返回代碼2,並在命令行中出現連接錯誤:

mysqldump --user=root --password= --host=localhost dbname > c:\temp\dumpfile.sql

我在這里找到的返回碼:

Taken from client/mysqldump.c in MySQL 5.1.59:

#define EX_USAGE 1
#define EX_MYSQLERR 2
#define EX_CONSCHECK 3
#define EX_EOM 4
#define EX_EOF 5 /* ferror for output file was got */
#define EX_ILLEGAL_TABLE 6

為什么在java中運行相同的命令時得到(錯誤)返回代碼6並在命令行中正常工作?

稍后編輯:我從Windows嘗試。

Runtime.exec不是shell ,因此使用>和<的重定向將不起作用。 目前該命令傳遞>mysqldump ,其解釋為名稱為要導出表。 (因此返回代碼6,“非法表”。)

有兩種解決方案:

  1. 運行shell。 使用此命令而不是您擁有的命令:

     cmd.exe /c "mysqldump --user=root --password= --host=localhost dbname > c:\\temp\\dumpfile.sql" 
  2. 使用Process.getInputStream()將命令的輸出自己寫入文件。

mysqldump現在支持--result-file=

所以它看起來像這樣。

mysqldump --user=root --password= --host=localhost dbname --result-file=c:\temp\dumpfile.sql

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM