Не удается вызвать 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 2

1 ответ:

Метасимвол " > " реализуется оболочкой; ни одна оболочка не участвует в выполнении программы с Runtime.exec(), поэтому последние два аргумента для mysqldump являются мусором. Используйте форму аргумента массива Runtime.exec(); передайте "/bin/sh "как первый аргумент,"- c " как второй, а вашу командную строку как третий; таким образом, метасимволы оболочки будут интерпретированы /bin/sh.