我在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
任何想法
答案 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和密码之间不应有空格)。 它对我有用。