java中的mysql转储无法正常工作

时间:2013-02-27 07:51:39

标签: java mysql

我在java中尝试这个命令

executeCmd = DBConfig.dbLocation + "\\mysqldump -u " + mysqlUser +
    " -p"+DBConfig.dbPass + " " + DBConfig.dbName + 
    " -r -opt>supervisorDbBkup.sql";

它给我代码1而不是0

            String executeCmd = "";
    executeCmd = DBConfig.dbLocation+"\\mysqldump -u"+mysqlUser+
            " -p"+DBConfig.dbPass+" "+DBConfig.dbName+" -r -opt>supervisorDbBkup.sql";

    Process runtimeProcess =Runtime.getRuntime().exec(executeCmd);
    int processComplete = runtimeProcess.waitFor();
    if(processComplete == 0){
        return "Backup taken successfully";
    } else {
        return "Could not take mysql backup";
    }

这是我正在运行的命令:

                E:\program file\MySQL\MySQL Server 5.5\bin\mysqldump -uroot -p0502 dashboardsupervisor -r -opt>supervisorDbBkup.sql

任何想法

3 个答案:

答案 0 :(得分:2)

您需要做的是在构建executeCmd之后打印出Console.Out.WriteLine (executeCmd); 的内容,以查看它包含的内容,例如:

cmd

如果该命令在命令行中不能完全按照您的构造工作,则它不太可能在您的程序中运行。复制并粘贴命令完全作为输出,并尝试从Runtime.exec() shell执行它。

我怀疑你的问题在于可执行文件的路径或其中一个选项。

如果不是这样,您需要注意重定向。重定向是 shell 功能,可能无法用于mysqldump调用。你会发现重定向位作为参数传递给String[] cmd = {"/bin/sh", "-c", "/path/to/mysqldump blah blah >/tmp/tempout"}; Process p = Runtime.getRuntime().exec(cmd); 执行者,它根本不理解它。

执行此操作的常用方法是使用参数调用shell本身,告诉它如何正确运行命令并重定向,例如:

cmd /c

(或Windows的等效mysqldump)。

确保正确处理重定向(由shell本身处理),{{1}}可执行文件只获取它理解的参数。

答案 1 :(得分:1)

尝试以下

executeCmd = "<Absolute Path to MYSQL>\bin" + "\\mysqldump -u " + mysqlUser +
    " -p"+DBConfig.dbPass + " " + DBConfig.dbName + 
    " -r --opt > supervisorDbBkup.sql";

<强>更新

-opt不是mysqldump跟随

的选项
--opt

答案 2 :(得分:0)

尝试使用此命令 “C:\ Program Files \ MySQL \ MySQL Server 5.1 \ bin \ mysqldump -u username -pPASS_WORD database_name -r backup.sql”

注意-u和用户名以及-p和密码之间的空格(-p和密码之间不应有空格)。 它对我有用。