1

我想在 mysql 5.6 中备份数据库。
为此,我使用这种方法:

public boolean backupDB(String dbName, String dbUserName, String dbPassword, String path) {

        String executeCmd = "D://mysql-5.6.11-win32/bin/mysqldump -u " + dbUserName + " -p" + dbPassword
                + " --add-drop-database -B " + dbName + " -r " + path;
        Process runtimeProcess;
        try {

            runtimeProcess = Runtime.getRuntime().exec(executeCmd);
            // any error message?
            StreamGobbler errorGobbler = new StreamGobbler(runtimeProcess.getErrorStream(), "ERR");
            // any output?
            StreamGobbler outputGobbler = new StreamGobbler(runtimeProcess.getInputStream(), "OUT");
            // kick them off
            errorGobbler.start();
            outputGobbler.start();

            int processComplete = runtimeProcess.waitFor();

            if (processComplete == 0) {
                System.out.println("Backup created successfully");
                return true;
            } else {
                System.out.println("Could not create the backup");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return false;
    }

StreamGobbler 是包装runtimeProcess.getErrorStream()runtimeProcess.getInputStream()进入 BufferedReader 的线程。readLine()BufferedReader 只是使用方法逐行读取。这是我在这篇文章中得到的提示。

我的问题是方法 backupDB 挂在这一行:

int processComplete = runtimeProcess.waitFor();

如果我用 exitValue 替换 waitFor 方法,我会收到错误

java.lang.IllegalThreadStateException: process has not exited

因此我必须使用 waitFor 方法。不幸的是,它永远运行。我必须按 Eclipse 控制台上的红色图标来停止 JVM。

如何使过程完成并备份mysql数据库?这个解决了谢谢!

编辑要启动 mysqldump.exe 我需要写完整的路径:

String executeCmd = "D://mysql-5.6.11-win32/bin/mysqldump -u "

你不知道如何摆脱完整的路径。我想在计算机上的 mysqldump.exe 位置独立启动 mysqldump。

也许有一种方法可以获取具有所有连接详细信息的 mysqldump.exe 的路径。

编辑如果我尝试使用没有完整路径的 mysqldump 到 mysqldump.exe 我收到此异常:

java.io.IOException: Cannot run program "mysqldump": CreateProcess error=2, Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    at java.lang.Runtime.exec(Runtime.java:615)
    at java.lang.Runtime.exec(Runtime.java:448)
    at java.lang.Runtime.exec(Runtime.java:345)
    at dbViewer.model.ConnectionManager.backupDB(ConnectionManager.java:273)
    at dbViewer.model.ConnectionManager.main(ConnectionManager.java:337)
Caused by: java.io.IOException: CreateProcess error=2, Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:189)
    at java.lang.ProcessImpl.start(ProcessImpl.java:133)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1021)
    ... 5 more

谢谢!

4

1 回答 1

2

您可以简单地使用 mysqldump -p选项:

mysqldump –u[user name] –p[password] [database name] > [dump file]
于 2013-08-15T07:45:11.227 回答