首页 > 解决方案 > 从 java 应用程序备份 MySQL 数据库

问题描述

我正在尝试从我的 Java 应用程序备份我的 MySQL 数据库。这是代码:

String executeCmd = "mysqldump.exe -u " + dbUser + " -p" + dbPass;
executeCmd += " --all-databases > " + savePath;
System.out.println(executeCmd);
Runtime.getRuntime().exec(executeCmd);

但它什么也没做。如果我复制 System.out.println 的输出并将其粘贴到 cmd 中,它可以正常工作。有人可以说Java有什么问题吗?

标签: javamysql

解决方案


我强烈建议您阅读JavaWorld 上有关Runtime.getRuntime(). 长话短说,您的代码有两个主要问题。首先,您没有等待流程完成,其次您没有处理该流程的输出。从上面的文章中提取以下部分代码,我们可以编写一个应该可以工作的版本:

try {            
    Runtime rt = Runtime.getRuntime();
    String executeCmd = "mysqldump.exe -u " + dbUser + " -p" + dbPass;
    executeCmd += " --all-databases > " + savePath;
    Process proc = rt.exec(executeCmd);
    InputStream stderr = proc.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>");
    int exitVal = proc.waitFor();
    System.out.println("Process exitValue: " + exitVal);
}
catch (Throwable t) {
    t.printStackTrace();
}

如果如您所说,从您运行此代码的同一台机器上调用mysqldump成功,则不应出现错误警告。如果有任何错误,那么上面的代码片段应该能让你很好地了解它们是什么,并处理它们。


推荐阅读