java中的mysql转储不工作
我正在用java尝试这个命令java中的mysql转储不工作,java,mysql,Java,Mysql,我正在用java尝试这个命令 executeCmd = DBConfig.dbLocation + "\\mysqldump -u " + mysqlUser + " -p"+DBConfig.dbPass + " " + DBConfig.dbName + " -r -opt>supervisorDbBkup.sql"; 它给了我代码1而不是0 String executeCmd = ""; executeCmd = DBConfig.
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
任何想法您需要做的是在构建后打印出
executeCmd
的内容,查看其中包含的内容,例如:
Console.Out.WriteLine (executeCmd);
String[] cmd = {"/bin/sh", "-c", "/path/to/mysqldump blah blah >/tmp/tempout"};
Process p = Runtime.getRuntime().exec(cmd);
如果该命令在命令行中的工作方式与您构建的不完全相同,那么它不太可能在您的程序中工作。复制并粘贴与输出完全相同的命令,并尝试从cmd
shell执行该命令
我怀疑您的问题在于可执行文件的路径或其中一个选项
如果不是这样,您需要注意重定向。重定向是一种shell功能,可能无法用于Runtime.exec()
调用。您会发现重定向位作为参数传递给mysqldump
execuable,它根本不理解它
通常的方法是使用参数调用shell本身,告诉它如何正确运行命令和重定向,例如:
Console.Out.WriteLine (executeCmd);
String[] cmd = {"/bin/sh", "-c", "/path/to/mysqldump blah blah >/tmp/tempout"};
Process p = Runtime.getRuntime().exec(cmd);
(或适用于Windows的等效cmd/c
)
这可以确保重定向得到正确处理(由shell本身处理),并且可执行文件仅获取它理解的参数。您需要做的是在构建后打印出
executeCmd
的内容,以查看它包含的内容,例如:
Console.Out.WriteLine (executeCmd);
String[] cmd = {"/bin/sh", "-c", "/path/to/mysqldump blah blah >/tmp/tempout"};
Process p = Runtime.getRuntime().exec(cmd);
如果该命令在命令行中的工作方式与您构建的不完全相同,那么它不太可能在您的程序中工作。复制并粘贴与输出完全相同的命令,并尝试从cmd
shell执行该命令
我怀疑您的问题在于可执行文件的路径或其中一个选项
如果不是这样,您需要注意重定向。重定向是一种shell功能,可能无法用于Runtime.exec()
调用。您会发现重定向位作为参数传递给mysqldump
execuable,它根本不理解它
通常的方法是使用参数调用shell本身,告诉它如何正确运行命令和重定向,例如:
Console.Out.WriteLine (executeCmd);
String[] cmd = {"/bin/sh", "-c", "/path/to/mysqldump blah blah >/tmp/tempout"};
Process p = Runtime.getRuntime().exec(cmd);
(或适用于Windows的等效cmd/c
)
这可以确保重定向得到正确处理(由shell本身处理),并且可执行文件仅获取它理解的参数。请尝试以下操作
executeCmd = "<Absolute Path to MYSQL>\bin" + "\\mysqldump -u " + mysqlUser +
" -p"+DBConfig.dbPass + " " + DBConfig.dbName +
" -r --opt > supervisorDbBkup.sql";
试试下面的方法
executeCmd = "<Absolute Path to MYSQL>\bin" + "\\mysqldump -u " + mysqlUser +
" -p"+DBConfig.dbPass + " " + DBConfig.dbName +
" -r --opt > supervisorDbBkup.sql";
请尝试使用此命令
“C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqldump-u username-pPASS\u WORD database\u name-r backup.sql”
注意-u和username以及-p和password之间的空格(在-p和password之间应该没有空格)。
它对我有效。尝试使用此命令
“C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqldump-u username-pPASS\u WORD database\u name-r backup.sql”
注意-u和username以及-p和password之间的空格(在-p和password之间应该没有空格)。
它对我有用。你使用哪种操作系统?显示如何使用执行
executeCmd
。win7,我已将上面的代码粘贴到DBConfig.dbLocation是否指向MYSQL\u HOME/bin?是的,其:公共静态字符串dbLocation=“E:\\program file\\MYSQL\\MYSQL Server 5.5\\bin”;这是我正在运行的命令:E:\program file\MySQL\MySQL Server 5.5\bin\mysqldump-uroot-p0502 dashboardsupervisor-r-opt>SupervisorDBKUP.sqls您使用哪个操作系统?显示如何使用执行executeCmd
。win7,我已将上面的代码粘贴到DBConfig.dbLocation是否指向MYSQL\u HOME/bin?是的,其:公共静态字符串dbLocation=“E:\\program file\\MYSQL\\MYSQL Server 5.5\\bin”;这是我正在运行的命令:E:\program file\MySQL\MySQL Server 5.5\bin\mysqldump-uroot-p0502 dashboardsupervisor-r-opt>SupervisorDBKUP.sqlbin之前是否有一个\before-bin??使用runtimeProcess.getInputStream()打印runtimeProcess的输出;为了更好地理解例外情况,是否会有一个\before bin??使用runtimeProcess.getInputStream()打印runtimeProcess的输出;为了更好地理解例外情况,如果我在shell中运行相同的命令,它就可以正常工作。。它在bin文件夹中创建一个新文件,在java中,我希望它将新文件保存在war文件夹中..这就是我得到的:java.io.IOException:无法运行程序“E:/program file/MySQL/MySQL Server 5.5/bin/sh”:CreateProcess error=2,系统无法找到使用此代码的文件指定编辑器:String executeCmd=“”;executeCmd=“mysqldump-u”+dbUser+“-p”+dbPass+“”+dbName+“-r backup.sql”;如果我在shell中运行相同的命令,它就可以正常工作。。它在bin文件夹中创建一个新文件,在java中,我希望它将新文件保存在war文件夹中..这就是我得到的:java.io.IOException:无法运行程序“E:/program file/MySQL/MySQL Server 5.5/bin/sh”:CreateProcess error=2,系统无法找到使用此代码的文件指定编辑器:String executeCmd=“”;executeCmd=“mysqldump-u”+dbUser+“-p”+dbPass+“”+dbName+“-r backup.sql”;