резервное копирование базы данных mysql java-код
Я попытался запустить следующий код, который должен создать резервную копиюмоей базы данных , но он показывает некоторые ошибки во время выполнения.
Но я попытался запустить систему .из.println () выводит часть, (которую я прокомментировал в данном коде) в MySQL shell и она работала.Он показывает проблему с файлом ввода-вывода. Пожалуйста, кто-нибудь, помогите мне.
package files;
public class tableBackup_1 {
public boolean tbBackup(String dbName,String dbUserName, String dbPassword, String path) {
String executeCmd = "mysqldump -u " + dbUserName + " -p" + dbPassword + " --add-drop-database -B " + dbName + " -r " + path;
Process runtimeProcess;
try
{
System.out.println(executeCmd);//this out put works in mysql shell
runtimeProcess = Runtime.getRuntime().exec(executeCmd);
int processComplete = runtimeProcess.waitFor();
if (processComplete == 0)
{
System.out.println("Backup created successfully");
return true;
}
else
{
System.out.println("Could not create the backup");
}
} catch (Exception ex)
{
ex.printStackTrace();
}
return false;
}
public static void main(String[] args){
tableBackup_1 bb = new tableBackup_1();
bb.tbBackup("test","harin","1234","C:/Users/Master/Downloads/123.sql");
}
}
mysqldump -u harin -p1234 --add-drop-database -B test -r C:/Users/Master/Downloads/123.sql
java.io.IOException: Cannot run program "mysqldump": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at files.tableBackup_1.tbBackup(tableBackup_1.java:12)
at files.tableBackup_1.main(tableBackup_1.java:34)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
... 5 more
3 ответа:
Пожалуйста, проверьте, есть ли в вашей глобальной переменной окружения PATH
\bin (сделайте echo %PATH%
и посмотрите). Эффективно вы должны уметь печатать вашу систему.из.println () содержимое в простой строке DOS и должен быть в состоянии запустить его.Даже с этим, если он не работает попробуйте изменить код, чтобы выполнить, как показано ниже
runtimeProcess = Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", executeCmd });
В идеале это должно устранить проблему.
Обновление:
Если его нет в переменной окружения PATH, измените код к следующему
String executeCmd = "<Path to MySQL>/bin/mysqldump -u " + dbUserName + " -p" + dbPassword + " --add-drop-database -B " + dbName + " -r " + path;
runtimeProcess = Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", executeCmd });
Я попробовал этот вариант, но он не сработал, поэтому я заменил его на
this runtimeProcess = Runtime.getRuntime().exec(executeCmd);
И это сработало
Я решил эту проблему, дав полный путь к mysqldump.exe
Переменные окружения SO можно получить с помощью
Map<String, String> env = System.getenv(); final String LOCATION = env.get("MYSQLDUMP");
Я настраиваю системную переменную следующим образом:
- Имя Переменной:
MYSQLDUMP
- значение:
D:\xampp\mysql\bin\mysqldump.exe
Теперь просто выполните этот код ниже,
Примечание: Если у вас нет настроенного пароля для сервера mysql, просто удалите атрибутString executeCmd = LOCATION+" -u " + DBUSER + " --add-drop-database -B " + DBNAME + " -r " + PATH + ""+FILENAME Process runtimeProcess = = Runtime.getRuntime().exec(executeCmd);
-p PASSWORD
из кода. И не забудьте перезагрузить компьютер после создания новой системы переменная.