Java exec()mysqldump错误:无法';“找不到表”&燃气轮机&引用;

Java exec()mysqldump错误:无法';“找不到表”&燃气轮机&引用;,java,exec,mysqldump,Java,Exec,Mysqldump,我正在从一个Java类执行mysqldump命令,但我一直得到标题中提到的错误 这是我正在使用的代码: Process runtimeProcess = Runtime.getRuntime().exec("mysqldump -uroot -pmypassword valo > /etc/valbu.sql"); int processComplete = runtimeProcess.waitFor(); if(processComple

我正在从一个Java类执行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");
        }
processruntimeprocess=Runtime.getRuntime().exec(“mysqldump-uroot-pmypassword valo>/etc/valbu.sql”);
int processComplete=runtimeProcess.waitFor();
if(processComplete==0){
System.out.println(“备份成功”);
}否则{
InputStream stderr=runtimeProcess.getErrorStream();
InputStreamReader isr=新的InputStreamReader(stderr);
BufferedReader br=新的BufferedReader(isr);
字符串行=null;
System.out.println(“”);
而((line=br.readLine())!=null)
系统输出打印项次(行);
System.out.println(“”);
System.out.println(“无法进行mysql备份”);
}

看起来他不明白
不是一个表,而是一个要转储的命令。

常见问题-不能使用管道或重定向执行语句。它们只能由shell执行

进一步阅读


常见问题-无法使用管道或重定向执行语句。它们只能由shell执行

进一步阅读


这将不起作用,因为
Runtime.exec()
不会调用shell,而
是shell重定向


因此,要么使用像
{/bin/bash'、“-c”、“thescripthere”}
,(不推荐)这样的数组,要么使用
ProcessBuilder
,这将不起作用,因为
运行时.exec()
不会调用shell,而
是shell重定向


因此,可以使用类似于
{/bin/bash'、“-c”、“thescripthere”}
,(不推荐)的数组,或者使用
ProcessBuilder
尝试在mysqldump命令中使用
结果文件
选项,而不是重定向操作符


mysqldump-uroot-pmypassword valo--result file=/etc/valbu.sql
尝试在mysqldump命令中使用
结果文件
选项,而不是重定向操作符


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

不要将凭据作为命令行参数传递!它们可能对主机上的其他用户可见(通过
ps-o args
)。相反,请将它们作为环境变量或通过stdin传递。不要将凭据作为命令行参数传递!它们可能对主机上的其他用户可见(通过
ps-o args
)。相反,可以将它们作为环境变量传递,或者通过stdin传递。非常感谢,array命令工作得很好。由于不推荐,我想进入processbuilder。我会研究一下的,谢谢!我也面临同样的问题,可以解释一下为什么不推荐这种方法吗?非常感谢,array命令工作得很好。由于不推荐,我想进入processbuilder。我会研究一下的,谢谢!我也面临同样的问题,有人能解释为什么不推荐这种方法吗?轰!快速有效的缓解谢谢,伙计,简单!我已经找了好几个小时了;工作得很有魅力!!繁荣快速有效的缓解谢谢,伙计,简单!我已经找了好几个小时了;工作得很有魅力!!