2013-08-14 2 views
1

mysql 5.6에서 데이터베이스를 백업하고 싶습니다. 이를 위해
나는이 방법을 사용 :java 프로세스가 mysqldump 실행을 멈추는 이유는 무엇입니까?

public boolean backupDB(String dbName, String dbUserName, String dbPassword, String path) { 

     String executeCmd = "D://mysql-5.6.11-win32/bin/mysqldump -u " + dbUserName + " -p" + dbPassword 
       + " --add-drop-database -B " + dbName + " -r " + path; 
     Process runtimeProcess; 
     try { 

      runtimeProcess = Runtime.getRuntime().exec(executeCmd); 
      // any error message? 
      StreamGobbler errorGobbler = new StreamGobbler(runtimeProcess.getErrorStream(), "ERR"); 
      // any output? 
      StreamGobbler outputGobbler = new StreamGobbler(runtimeProcess.getInputStream(), "OUT"); 
      // kick them off 
      errorGobbler.start(); 
      outputGobbler.start(); 

      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; 
    } 

StreamGobbler가의 BufferedReader로 runtimeProcess.getErrorStream()runtimeProcess.getInputStream()를 래핑 스레드입니다. BufferedReader는 단지 readLine() 메서드를 사용하여 한 줄씩 읽습니다. 이것은 this article에 관한 힌트입니다.

int processComplete = runtimeProcess.waitFor(); 

내가 exitValue와 함께 WAITFOR 방법을 대체 할 경우

내가받을 오류

java.lang.IllegalThreadStateException: process has not exited 

그러므로 내가 WAITFOR 방법을 사용해야합니다 :

내 문제는 backupDB이 줄에 달려 그 방법이다. 불행히도 그것은 영원히 계속됩니다. JVM을 중지하려면 Eclipse 콘솔에서 빨간색 아이콘을 눌러야합니다.

어떻게 완료 및 백업 mysql 데이터베이스를 만들 수 있습니까? 감사합니다.

편집 내가 여기에 전체 경로를 작성해야 mysqldump.exe 시작하려면 :

String executeCmd = "D://mysql-5.6.11-win32/bin/mysqldump -u " 

당신은 전체 경로를 제거하는 방법을 알고하지 마십시오. 컴퓨터에서 mysqldump.exe 위치에 독립적으로 mysqldump를 시작하고 싶습니다.

아마 모든 연결 세부 사항을 가진 mysqldump.exe의 경로를 얻는 방법이 있습니다. 내가 mysqldump.exe하는 전체 경로없이 mysqldump를 사용하려고하면

편집 나는이 예외가 나타날 수

java.io.IOException: Cannot run program "mysqldump": CreateProcess error=2, Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 
    at java.lang.Runtime.exec(Runtime.java:615) 
    at java.lang.Runtime.exec(Runtime.java:448) 
    at java.lang.Runtime.exec(Runtime.java:345) 
    at dbViewer.model.ConnectionManager.backupDB(ConnectionManager.java:273) 
    at dbViewer.model.ConnectionManager.main(ConnectionManager.java:337) 
Caused by: java.io.IOException: CreateProcess error=2, Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë 
    at java.lang.ProcessImpl.create(Native Method) 
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:189) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:133) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1021) 
    ... 5 more 

감사합니다!

+3

? 사용자 입력을 요구합니까? – dkatzel

+0

http://stackoverflow.com/questions/9567699/how-to-mysqldump-on-java – Brian

+0

Ah. 당신이 맞다면 암호를 입력하라는 메시지를 표시하고 암호가 없음을 나타내는 Enter 키를 누르면 성공적으로 백업이 생성됩니다. 하지만 빈 암호를 사용합니다. 빈 암호를 사용하여 데이터베이스를 백업하는 방법은 무엇입니까? –

답변

2

당신은 단순히 mysqldump를 사용할 수 있습니다 -p 옵션 : 당신이 명령 줄에서 수동으로 명령을 실행하면 어떻게됩니까

mysqldump –u[user name] –p[password] [database name] > [dump file] 
+0

내 첫 번째와 두 번째를 살펴보십시오. –

+1

@VolodymyrLevytskyi 새로운 질문을 하나의 질문에서 너무 많이 질문하지 않거나 하나의 질문이 해결되면 질문을 편집하지 않아도됩니다. – nos

+0

@VolodymyrLevytskyi 사용자 "nos"가 정확합니다. 내 대답이 정확하고 문제를 해결했다면 받아 들여야합니다. 두 번째 질문을하십시오. 특별한 경우에 당신이 언급했듯이, mysqldump 명령은 경로에 없기 때문에 mysqldump를 전체 위치없이 입력 할 수 없습니다. 구글은 "윈도우 경로 설정". – Frankie

관련 문제