Я пишу класс обслуживания для получения резервных копий и восстановления данных из базы данных.Мой код работает правильно для резервного копирования, но не удалось восстановить данные.
Я использую 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;
}
В чем, по-вашему, проблема?