Не удается вызвать mysqldump из java в linux
Это код:
public static File backupDB() throws IOException {
File file = null;
file = new File("BKUP_DB_"
+ Calendar.getInstance()).replace("/", "-") + ".sql");
String executeCmd = "mysqldump -u " + "dbUserName" + " -p" + "dbPassword"
+ " " + "dbName" + " > " +file.getPath();
Process runtimeProcess;
try {
runtimeProcess = Runtime.getRuntime().exec(executeCmd);
int processComplete = runtimeProcess.waitFor();
if (processComplete == 0) {
System.out.println("Backup created successfully");
runtimeProcess.destroy();
return file;
} else {
System.out.println("Could not create the backup");
}
} catch (Exception ex) {
ex.printStackTrace();
}
return file;
}
Я попытался использовать полный путь mysqldump, как /usr/bin/mysqldum
, но ничего не работает, я подозреваю, что проблемы с разрешениями в linux. вы должны быть root, чтобы иметь возможность создать резервную копию mysql? если нет, то в чем проблема с этим кодом ? если да, то в чем проблема linux: D? как я могу решить эту проблему.
спасибо.
1 ответ:
Метасимвол " > " реализуется оболочкой; ни одна оболочка не участвует в выполнении программы с
Runtime.exec()
, поэтому последние два аргумента дляmysqldump
являются мусором. Используйте форму аргумента массиваRuntime.exec()
; передайте "/bin/sh "как первый аргумент,"- c " как второй, а вашу командную строку как третий; таким образом, метасимволы оболочки будут интерпретированы /bin/sh.