Когда я вызываю exec поверх сети, и он длится несколько секунд, он терпит неудачу

У меня есть приложение, разработанное в Java и MySQL. Я использую его по локальной сети и размещаю приложение на ПК с Windows 7 Professional x64. Этот ПК служит сервером и не используется для каких-либо других целей. Я поделился папкой, в которой файлы классов приложений проживает публично, а другие ПК могут подключаться к этому приложению, используя следующий пакетный скрипт:

net use v: \\192.168.0.44\MyAppName
v:
start "" /b javaw -cp .;v:\bin;v:\lib\swt.jar;v:\lib\mysql-connector-java-5.0.8-bin.jar;v:\lib\jdatepicker-1.3.2.jar;v:\lib\commons-io-2.4.jar;v:\lib\jfreechart-1.0.17.jar;v:\lib\jcommon-1.0.21.jar;v:\lib\forms-1.3.0.jar;v:\lib\activation-1.1.jar;v:\lib\commons-email-1.3.2.jar;v:\lib\mail.jar main.Main

Все ПК используют JAVA 7 и работают под управлением Windows 7, 8 и Mac, все 64 бит. Сетевые кабели - мега.

Все части этого приложения работают нормально, только резервное копирование создает проблему. Я использовал для этого следующий код Java:

public static boolean getDatabaseBackUp() {
 boolean isSucess = false;
 File dbBackUpFile = new File("db.sql");

 File mysqlDir = new File("\\\\192.168.0.44\\xampp\\mysql");
 File mysqlBinDir = new File(mysqlDir, "bin");
 File mysqlumpFile = new File(mysqlBinDir, "mysqldump.exe");
 String dbUser = "myUserName";
 String dbPass = "myPassword";
 String dbName = "myDbName";
 String executeCmd = "";
 executeCmd = mysqlumpFile + " " + dbName + " -u " + dbUser
 + " --password=" + dbPass + " " + " -r \""
 + dbBackUpFile.getAbsolutePath() + "\"";
 System.out.println(executeCmd);
 try {
 Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);
 int processComplete = runtimeProcess.waitFor();
 if (processComplete == 0) {
 System.out.println("Process is completed");
 isSucess = true;
 } else {
 System.out.println("Process is NOT completed");
 isSucess = false;
 }
 } catch (Exception e) {
 e.printStackTrace();
 isSucess = false;
 }
 return isSucess;
} // getDatabaseBackUp ()

Приведенный выше код, используемый для работы на всех ПК по сети, включая сервер, когда база данных была небольшой, я имею в виду около 3 МБ, но теперь она имеет значение 335 МБ и резервное копирование работает только при открытии приложения на сервере ПК, когда оно открывается с других ПК по сети, getDatabaseBackUp() возвращает false.

Если я запустил его с помощью -debug -verbose выход будет:

\\192.168.0.44\xampp\mysql\bin\mysqldump.exe myApplication -u myUserName --password=myPassword -r "\\192.168.0.44\myApplication\assets\db_backups\2014_06_10_16_28_13.sql"
[Loaded java.lang.ProcessBuilder from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded java.lang.Process from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded java.lang.ProcessImpl from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded java.lang.ProcessImpl$2 from C:\Program Files\Java\jre7\lib\rt.jar]
Process is NOT completed

Если я запустил mysqldump... --verobse... на сервере я получаю:

C:\Users\myPcUserName>\\192.168.0.44\xampp\mysql\bin\mysqldump.exe myApplicationName -u myUserName --password=myPassword --verbose -r "\\192.168.0.44\myApplicationName\assets\db_backups\2014_06_11_09_59_56.sql

-- Connecting to localhost...
-- Retrieving table structure for table batch_fault_count...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table batch_insert_time_check...
-- It a view, create dummy table for view
-- Retrieving table structure for table batch_status_logs...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table batch_types...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table batch_username_for_pq_check...
-- It a view, create dummy table for view
-- Retrieving table structure for table batches...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table batches_price_list...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table dblock...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table digitally_verified_file_count...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table dvds...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table dvds_batches...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table expense_types...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table expenses...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table files...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table keys_values...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table mailing_list...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table qc_dblock...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table scanners_dirs...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table settings...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table user_check_ins...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table user_groups...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table users...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table users_salary...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving view structure for table batch_fault_count...
-- It base table, skipped
-- Retrieving view structure for table batch_insert_time_check...
-- Retrieving view structure for table batch_status_logs...
-- It base table, skipped
-- Retrieving view structure for table batch_types...
-- It base table, skipped
-- Retrieving view structure for table batch_username_for_pq_check...
-- Retrieving view structure for table batches...
-- It base table, skipped
-- Retrieving view structure for table batches_price_list...
-- It base table, skipped
-- Retrieving view structure for table dblock...
-- It base table, skipped
-- Retrieving view structure for table digitally_verified_file_count...
-- It base table, skipped
-- Retrieving view structure for table dvds...
-- It base table, skipped
-- Retrieving view structure for table dvds_batches...
-- It base table, skipped
-- Retrieving view structure for table expense_types...
-- It base table, skipped
-- Retrieving view structure for table expenses...
-- It base table, skipped
-- Retrieving view structure for table files...
-- It base table, skipped
-- Retrieving view structure for table keys_values...
-- It base table, skipped
-- Retrieving view structure for table mailing_list...
-- It base table, skipped
-- Retrieving view structure for table qc_dblock...
-- It base table, skipped
-- Retrieving view structure for table scanners_dirs...
-- It base table, skipped
-- Retrieving view structure for table settings...
-- It base table, skipped
-- Retrieving view structure for table user_check_ins...
-- It base table, skipped
-- Retrieving view structure for table user_groups...
-- It base table, skipped
-- Retrieving view structure for table users...
-- It base table, skipped
-- Retrieving view structure for table users_salary...
-- It base table, skipped
-- Disconnecting from localhost...

C:\Users\myPcUserName>

Однако если я запустил mysqldump... --verobse... на других компьютерах я получаю:

C:\Users\myPcUserName>\\192.168.0.44\xampp\mysql\bin\mysqldump.exe myApplicationName -u myUserName --password=myPassword --verbose -r "\\192.168.0.44\myApplicationName\assets\db_backups\2014_06_11_09_59_56.sql
-- Connecting to localhost...
mysqldump: Got error: 1049: Unknown database 'myApplicationName' when selecting the database

может кто-нибудь сказать мне, в чем проблема, и как я могу это исправить?

1 ответ

Проблема заключается в том, что хозяин. Я не указал хост в java-коде, который использовался для генерации команды cmd. Мне нужно было -h 192.168.0.44 в команде cmd, поэтому фрагмент кода Java должен выглядеть так:

File dbBackUpFile = new File("db.sql");

File mysqlDir = new File("\\\\192.168.0.44\\xampp\\mysql");
File mysqlBinDir = new File(mysqlDir, "bin");
File mysqlumpFile = new File(mysqlBinDir, "mysqldump.exe");
String dbUser = "myUserName";
String dbPass = "myPassword";
String dbName = "myDbName";
String dbIp = "192.168.0.44";
 String executeCmd = "";
 executeCmd = mysqlumpFile + " " + dbName + " -u " + dbUser + " -h " + dbIp
 + " --password=" + dbPass + " " + " -r \""
 + dbBackUpFile.getAbsolutePath() + "\"";

licensed under cc by-sa 3.0 with attribution.