我正在尝试使用中的ProcessBuilder
备份ProcessBuilder
DB,但是,我得到了这个错误。
"!Cannot run program "C:\Program Files\MySQL\MySQL Server 5.5\bin": CreateProcess error=5, Access is denied".
这是我的密码。
public static String backupDb() {
String resp=null;
try {
System.out.println("Started........");
ProcessBuilder builder = new ProcessBuilder("C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin", "mysqldump -u root -pmypass mydb> c:\\backup\\mybackup.sql");
builder.redirectErrorStream(true);
Process p = builder.start();
} catch(Exception e) {
resp="!"+e.getMessage();
}
return resp;
}
我哪里会出错?
发布于 2014-11-20 13:35:33
要做到这一点,你必须做几件事:
>
)将无法工作。C:\\foo\bar\foobar\backup.sql
中备份数据库,但不存在C:\\foo
、C:\\foo\\bar
、C:\\foo\\bar\\foobar
文件夹之一,则会出现错误" "
中,否则会出现尴尬的错误,如:'C:\Program' is not recognized as an internal or external command
这是一个测试版本,包括上述所有内容。我把filepath作为参数传递,因为这样更灵活。
public static void backupDb(final String mysqlDumpFilePath)
throws IOException, InterruptedException {
String folderPath = mysqlDumpFilePath.substring(0, mysqlDumpFilePath.lastIndexOf("\\"));
File folder = new File(folderPath);
if (!folder.exists()) {
folder.mkdirs(); // 2
}
File f = new File(mysqlDumpFilePath);
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "C:\\\"Program Files\"\\MySQL\\\"MySQL Server 5.5\"\\bin\\mysqldump -u root -pmypass mydb > "
+ f.getAbsolutePath()); //1 & 3
Process exec = builder.start();
int retCode = exec.waitFor();
if (retCode != 0) { //4
// something went wrong
InputStream errorStream = exec.getErrorStream();
byte[] buffer = new byte[errorStream.available()];
errorStream.read(buffer);
System.out.println(new String(buffer));
}
}
https://stackoverflow.com/questions/27039588
复制相似问题