1

我正在从 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");
        }

看起来他不明白那>不是一张桌子,而是一个转储的命令。

4

3 回答 3

3

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

进一步阅读

于 2013-01-07T10:54:25.230 回答
3

尝试使用result-filemysqldump 命令中的选项而不是重定向运算符>

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

于 2015-09-07T20:14:25.813 回答
1

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

因此,要么使用 , 之类的数组{ "/bin/bash", "-c", "thescripthere" }(不推荐),要么使用 a ProcessBuilder

于 2013-01-07T10:55:25.587 回答