mysqldump从java运行时返回代码6,但同样的命令从命令行运行正常

adi*_*ian 3 java mysql process mysqldump runtime.exec

当我通过Runtime.getRuntime从Java运行相同的命令时,我得到返回代码6.相同的命令在命令行中正常工作:

process = Runtime.getRuntime().exec(mysqldumpCommand);
int processComplete = process.waitFor();
Run Code Online (Sandbox Code Playgroud)

对于这两个命令,当从java运行并且没有转储时,我得到返回代码6.从命令行工作正常(我在本地环境上没有密码)

mysqldump --user=root --password= --host=localhost dbname > c:\temp\dumpfile.sql
mysqldump --user=root --password="" --host=localhost dbname > c:\temp\dumpfile.sql
Run Code Online (Sandbox Code Playgroud)

故意输入错误密码时,我会在java中返回代码2,并在命令行中出现连接错误:

mysqldump --user=root --password= --host=localhost dbname > c:\temp\dumpfile.sql
Run Code Online (Sandbox Code Playgroud)

我在这里找到的返回码:

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
Run Code Online (Sandbox Code Playgroud)

为什么在java中运行相同的命令时得到(错误)返回代码6并在命令行中正常工作?

稍后编辑:我从Windows尝试.

Jon*_*oni 5

Runtime.exec不是shell,因此使用>和<的重定向将不起作用.目前该命令正在传递>mysqldump它,它将其解释为您要导出的表的名称.(因此返回代码6,"非法表".)

有两种解决方案:

  1. 运行shell.使用此命令而不是您拥有的命令:

    cmd.exe /c "mysqldump --user=root --password= --host=localhost dbname > c:\temp\dumpfile.sql"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 用命令将命令的输出自己写入文件Process.getInputStream().