0

我在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

任何的想法

4

3 回答 3

2

您需要做的是executeCmd在构建它之后打印出它的内容,以查看它包含的内容,例如:

Console.Out.WriteLine (executeCmd);

如果该命令不能在命令行中完全按照您构建它的方式工作,那么它不太可能在您的程序中工作。完全按照输出的内容复制和粘贴命令,并尝试从cmdshell 执行它。

我怀疑您的问题在于可执行文件的路径或选项之一。

如果不是这种情况,则需要注意重定向。重定向是一种外壳功能,可能对呼叫不可用Runtime.exec()。您会发现重定向位被作为参数传递给mysqldump完全无法理解的可执行文件。

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

String[] cmd = {"/bin/sh", "-c", "/path/to/mysqldump blah blah >/tmp/tempout"};
Process p = Runtime.getRuntime().exec(cmd);

(或 Windows 的等效cmd /c项)。

这确保了重定向被正确处理(由 shell 本身)并且mysqldump可执行文件只获取它理解的参数。

于 2013-02-27T07:58:49.787 回答
1

尝试以下

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

更新:

-opt 不是 mysqldump 的选项,以下是

--opt
于 2013-02-27T07:59:27.843 回答
0

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

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

于 2013-12-26T18:02:20.137 回答