Как сделать резервную копию и восстановить базу данных MySQL, используя Java - PullRequest
3 голосов
/ 12 декабря 2011

У меня есть небольшое приложение, которое я собираюсь использовать для резервного копирования и восстановления базы данных mysql, код для резервного копирования выглядит следующим образом и работает правильно,

....
String command = "mysqldump --host=" + dataBase.getHost() + " --user=" + dataBase.getUserName() + " --password=" + dataBase.getPassword() + " "
                + dataBase.getDatabaseName() + " -r " + dataBase.getBackupPath() + "/ofm_mnu_backup_" + bkDate + ".sql";
        System.out.println(command);
        Process p = null;
        try {


            Runtime runtime = Runtime.getRuntime();
            p = runtime.exec(command);

            int processComplete = p.waitFor();

            if (processComplete == 0) {

                System.out.println("Backup created successfully");

            } else {
                System.out.println("Could not create the backup");
            }
....

Но когда я пытаюсь восстановить базу данныхиспользуя следующие коды, это не работает, пожалуйста, помогите

  ........
    String command = "mysqldump --host=" + dataBase.getHost() + " --user="+dataBase.getUserName() + " --password= " + dataBase.getPassword()+""+dataBase.getDatabaseName() + "  " + dataBase.getBackupPath();
        Process p = null;

        try {
            System.out.println(command);
            Runtime runtime = Runtime.getRuntime();
            p = runtime.exec(command);
            int processComplete = p.waitFor();

            if (processComplete == 0) {
                System.out.println("Backup restored successfully");

            } else {
                System.out.println("Could not restore the backup");
            }
     ......

После стольких поисков в Google я нашел ответ на свой вопрос,

  ......
  String[] executeCmd = new String[]{"mysql", [database], "--user=" + [username],"--password=" + [password], "-e", " source " + [absolute path to the sql file]};
  p = Runtime.getRuntime().exec(executeCmd);
  int processComplete = p.waitFor();
  ......

В приведенном выше коде наиболее важновещь ** "источник" + [абсолютный путь к файлу sql] ** не должно быть запятой между словом "источник" и путем к файлу.

это сработало для меня, я надеюсь, что это будетребята, тоже работаю на вас.

Ответы [ 4 ]

9 голосов
/ 12 декабря 2011

Я не думаю, что вы используете команду mysqldump совершенно верно. Разве вы не должны использовать < или > символы для обозначения резервного копирования / восстановления? Это обсуждается подробно здесь . Что-то вроде этого для резервного копирования:

String command = "mysqldump --host=" + dataBase.getHost() + " --user=" + dataBase.getUserName() + " --password=" + dataBase.getPassword() + " "
            + dataBase.getDatabaseName() + " > " + dataBase.getBackupPath() + "/ofm_mnu_backup_" + bkDate + ".sql";

и восстановить:

String command = "mysqldump --host=" + dataBase.getHost() + " --user=" + dataBase.getUserName() + " --password=" + dataBase.getPassword() + " "
            + dataBase.getDatabaseName() + " < " + dataBase.getBackupPath() + "/ofm_mnu_backup_" + bkDate + ".sql";
1 голос
/ 24 ноября 2015

Я хотел бы поблагодарить вас, ребята, за поддержку того, как восстановить базу данных mysql с помощью кода Java.Поскольку ни один из кодов не работал для меня, но он дал мне подсказку, чтобы заставить его работать.

Ниже мой окончательный рабочий код.

String[] executeCmd = new String[]{"C:\\xampp\\mysql\\bin\\mysql.exe",mydb, "--user=" + dbUserName, "--password=" + dbPassword, "-e", " source " + source};
0 голосов
/ 13 августа 2014

это действительно работа для восстановления

 String comando = "C:\\MySQL\\bin\\mysql.exe  --host=localhost --port=3306 --user=root --password=123 < D:\\back.sql";
File f = new File("restore.bat");
FileOutputStream fos = new FileOutputStream(f);
fos.write(comando.getBytes());
fos.close();
Process run = Runtime.getRuntime().exec("cmd /C start restore.bat ");  

и для резервного копирования

  DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.forLanguageTag("ru"));
    java.util.Date currentDate = new java.util.Date();
    Process p = null;
    try {
        Runtime runtime = Runtime.getRuntime();
        p = runtime.exec("C:\\MySQL\\bin\\mysqldump.exe  --default-character-set=utf8 -uroot -p123 -c  -B shch2 -r " + "D:/" + dateFormat.format(currentDate) + "_backup" + ".sql");

// измените dbpass и dbname с вашими dbpass и dbname int processComplete = p.waitFor ();

        if (processComplete == 0) {

            System.out.println("Backup created successfully!");

        } else {
            System.out.println("Could not create the backup");
        }


    } catch (Exception e) {
        e.printStackTrace();
    }

но вам нужно указать точный путь к mysql.exe и mysqldump.exe

0 голосов
/ 12 декабря 2011

Может быть из-за потока вывода, назначенного терминалу ... Это опция для запуска вашей команды mysqldump внутри cmd? например

String command = "cmd /K mysqldump..."

Вам также может быть интересно прочитать эту статью:

Надеюсь, это поможет

...