2

我需要避免错误并使用 mysqldump 将数据库备份存储在单独的文件路径中

public class NewClass {

    public static void main(String args[]) throws IOException, SQLException {
        String dbName = "test";
        String dbUser = "root";
        String dbPass = "root";
        try {
            String executeCmd = "";
            executeCmd = "mysqldump -u " + dbUser + " -p" + dbPass + " " + dbName + " -r backup.sql";

            Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);
            int processComplete = runtimeProcess.waitFor();

            if (processComplete == 0) {
                System.out.println("Backup taken successfully");
            } else {
                System.out.println("Could not take mysql backup");
            }
        } catch (InterruptedException ex) {
            Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
        }    

    }
}

错误:运行:线程“main”中的异常java.io.IOException:无法运行程序“mysqldump”:CreateProcess error=2,系统找不到java.lang.ProcessBuilder.start(ProcessBuilder.java:1042)指定的文件在 java.lang.Runtime.exec(Runtime.java:615) 在 java.lang.Runtime.exec(Runtime.java:448) 在 java.lang.Runtime.exec(Runtime.java:345) 在 mypkg.NewClass。 main(NewClass.java:27) Caused by: java.io.IOException: CreateProcess error=2, 系统在 java.lang.ProcessImpl.(ProcessImpl 处找不到 java.lang.ProcessImpl.create(Native Method) 指定的文件.java:288) 在 java.lang.ProcessImpl.start(ProcessImpl.java:133) 在 java.lang.ProcessBuilder.start(ProcessBuilder.java:1023) ... 还有 4 个 Java 结果:1 构建成功(总时间:0 秒)

4

4 回答 4

0

尝试将完整路径放入 mysqldump 程序

executeCmd = "/full/path/to/mysqldump -u " + dbUser + " -p" + dbPass + " " + dbName + " -r backup.sql";

我也很想将完整路径放在要写入转储的文件中。

于 2013-07-19T11:32:27.680 回答
0

您是否尝试为 exec 函数提供一个字符串数组?前段时间这对我有帮助。

String[] comm = new String[4];
comm[0] = "C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\mysqldump"
comm[1] = "-u " + dbUser;
comm[2] = "-p " + dbPass + " " + dbName;
comm[3] = "-r backup.sql";
Process runtimeProcess = Runtime.getRuntime().exec(comm)

因为我在使用单个字符串作为参数时有一些奇怪的行为......

于 2013-07-19T12:35:05.650 回答
0

只需修改您的

executeCmd = "mysqldump -u " + dbUser + " -p" + dbPass + " " + dbName + " -r backup.sql";

executeCmd = "mysqldump -u " + dbUser + " -p" + dbPass + " " + dbName;

并在 if-else 语句之后添加

String str="";

PrintWriter pw = new PrintWriter("path for this file/backup.sql");

Scanner outScanner = new Scanner(runtimeProcess.getInputStream());

while(outScanner.hasNextLine()){

pw.println(outScanner.nextLine());

}

outScanner.close();

pw.close();
于 2013-07-19T12:47:58.053 回答
0

我也有同样的问题。对我来说,我只是在路径变量中添加了 mysql。在路径变量中设置了旧安装。删除它并添加新路径。

于 2015-08-17T09:14:59.057 回答