MySQL восстановление данных с помощью Java программно - PullRequest
0 голосов
/ 07 мая 2019

Я пишу класс обслуживания для получения резервных копий и восстановления данных из базы данных.Мой код работает правильно для резервного копирования, но не удалось восстановить данные.

Я использую xampp для mysql на локальном хосте, и мой язык программы - java, а мой фреймворк - Spring (весенняя загрузка, maven).

Эта команда используется для восстановления данных:

C:\xampp\mysql\bin\mysql -u root db_template <C:\backups\backup_user.sql

В командной строке указанная выше команда выполняется безуспешно, но когда я запускаю программу и отправляю запрос на восстановление, это занимает много времени, и ответ не возвращается без ошибок.

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

Process runtimeProcess = Runtime.getRuntime().exec(command);

Я тестирую разные команды, например:

C:\xampp\mysql\bin\mysql -u root db_template -r C:\backups\backup_user.sql

или

C:\xampp\mysql\bin\mysql -u root db_template -e source C:\backups\backup_user.sql

Но эти команды были неверными.

полный класс:

@Service
public class BackupServiceImpl implements BackupService {

Logger logger = LogManager.getLogger("root");

//information of database
private static String databaseName = "db_template";
private static String username = "root";

//information of paths
private static String mySqlPathDirectory = "C:\\xampp\\mysql\\bin";
private static String backupFolderDirectory = "C:\\backups";


String message;

//=====================================================================

@Override
public String getBackupAll() {
    String executeCmd = mySqlPathDirectory + "\\mysqldump" +
            " -u " + username +
            " " + databaseName +
            " -r " + backupFolderDirectory + "\\backup.sql";

    return executeCommand(executeCmd, "backup");
}

@Override
public String getBackupOne(String tableName) {
    String executeCmd = mySqlPathDirectory + "\\mysqldump" +
            " -u " + username +
            " "  + databaseName +
            " " + tableName +
            " -r " + backupFolderDirectory + "\\backup_" + tableName + ".sql ";

    return executeCommand(executeCmd, "backup from " + tableName);
}

//--------------------------------------------------------------------

@Override
public String restoreAll() {

    String executeCmd = "\\mysql " + databaseName +
            " -u " + username +
            " -e source " + backupFolderDirectory + "\\backup.sql";

    return executeCommand(executeCmd, "restore");

}

@Override
public String restoreOne(String tableName) {
    String executeCmd = mySqlPathDirectory + "\\mysql" +
            " -u " + username +
            " " + databaseName  +
            " <" + backupFolderDirectory + "\\backup_"+tableName + ".sql";

    return executeCommand(executeCmd, "restore from " + tableName);
}

//-------------------------------------------------------------------

 private String executeCommand(String command, String processName) {
    System.out.println(command);
    try {

        Process runtimeProcess = Runtime.getRuntime().exec(command);

        System.out.println("*********" +runtimeProcess.waitFor());

        if (runtimeProcess.waitFor() == 0) {
            logger.info("The " + processName + " was completed successfully \n" + "command :" + command);
            message = "The " + processName + " was completed successfully";

        } else if (runtimeProcess.waitFor() == 1) {
            logger.warn("The " + processName + " failed\n" + "command :" + command);
            message = "The " + processName + " failed";
        }
    } catch (Exception e) {
        logger.error(e.getMessage());
    }
    return message;
}

В чем, по-вашему, проблема?

...