Сделайте резервную копию MySQL

Мне нужно избежать ошибки и сохранить резервную копию базы данных в отдельном пути к файлу с помощью mysqldump

public class NewClass {

    public static void main(String args[]) throws IOException, SQLException {
        String dbName = "test";
        String dbUser = "root";
        String dbPass = "root";
        try {
            String executeCmd = "";
            executeCmd = "mysqldump -u " + dbUser + " -p" + dbPass + " " + dbName + " -r backup.sql";

            Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);
            int processComplete = runtimeProcess.waitFor();

            if (processComplete == 0) {
                System.out.println("Backup taken successfully");
            } else {
                System.out.println("Could not take mysql backup");
            }
        } catch (InterruptedException ex) {
            Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
        }    

    }
}

ОШИБКА: запуск: исключение в потоке «main» java.io.IOException: не удается запустить программу «mysqldump»: ошибка CreateProcess = 2, система не может найти файл, указанный в java.lang.ProcessBuilder.start (ProcessBuilder.java:1042) в java.lang.Runtime.exec (Runtime.java:615) в java.lang.Runtime.exec (Runtime.java:448) в java.lang.Runtime.exec (Runtime.java:345) в mypkg.NewClass. main (NewClass.java:27) Вызвано: java.io.IOException: CreateProcess error = 2, Система не может найти файл, указанный в java.lang.ProcessImpl.create (собственный метод) в java.lang.ProcessImpl. (ProcessImpl .java: 288) в java.lang.ProcessImpl.start (ProcessImpl.java:133) в java.lang.ProcessBuilder.start (ProcessBuilder.java:1023) ... Еще 4 Java Результат: 1 УСПЕШНО СОЗДАТЬ (общее время: 0 секунд)


person Kannan    schedule 19.07.2013    source источник
comment
Есть ли mysqldump в переменной пути к вашей ОС?   -  person Sam Aleksov    schedule 19.07.2013
comment
Программа mysqldump на вашем %PATH% или $PATH?   -  person mthmulders    schedule 19.07.2013


Ответы (4)


Попробуйте указать полный путь к программе mysqldump

executeCmd = "/full/path/to/mysqldump -u " + dbUser + " -p" + dbPass + " " + dbName + " -r backup.sql";

Я бы также хотел указать полный путь к файлу, в который должен быть записан дамп.

person DaveH    schedule 19.07.2013
comment
Привет, DaveHowes, эта ошибка строки: executeCmd = C: \ Program Files \ MySQL \ MySQL Server 5.1 \ bin \ mysqldump -u + dbUser + -p + dbPass + + dbName + -r backup.sql; - person Kannan; 19.07.2013
comment
Привет, Дэйв Хоус, видишь ли ты эту ссылку, мое измененное кодирование stackoverflow.com/questions/17758634/ хранилище-база-резервная копия - person Kannan; 20.07.2013

Вы пробовали предоставить функции exec String-массив? Это помогло мне некоторое время назад.

String[] comm = new String[4];
comm[0] = "C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\mysqldump"
comm[1] = "-u " + dbUser;
comm[2] = "-p " + dbPass + " " + dbName;
comm[3] = "-r backup.sql";
Process runtimeProcess = Runtime.getRuntime().exec(comm)

Потому что у меня было странное поведение при использовании одной строки в качестве параметра ...

person t7bdh3hdhb    schedule 19.07.2013

Просто измените свой

executeCmd = "mysqldump -u " + dbUser + " -p" + dbPass + " " + dbName + " -r backup.sql";

to

executeCmd = "mysqldump -u " + dbUser + " -p" + dbPass + " " + dbName;

и добавить после оператора if-else

String str="";

PrintWriter pw = new PrintWriter("path for this file/backup.sql");

Scanner outScanner = new Scanner(runtimeProcess.getInputStream());

while(outScanner.hasNextLine()){

pw.println(outScanner.nextLine());

}

outScanner.close();

pw.close();
person Mukesh S    schedule 19.07.2013

У меня точно такая же проблема. Для меня я просто добавил mysql в переменную пути. В переменной пути была установлена ​​старая установка. Убрал его и добавил новый путь.

person Bee    schedule 17.08.2015