저번 시간에 백업하기와 복구하기를 해봤는데...

문제점이 하나 있었습니다.(여러개 일수도....^^:;)

리눅스에서는 사용할 수 없는 소스라는 거죠. ㅡㅡㅋ

 

이번 시간에는 복합적으로 저번 보다는 조금더 진화되고 리눅스와 윈도우에서

다 사용 가능한 샘플 소스입니다. ^^

 

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;


public class JavaMySqlBakUpAndRestore {

 private static String ID = "falinux";
 private static String PW = "falinux";
 private static String DB_NAME = "falinux";
 private static String TABLE_NAME = "phonebook";
 private static String FILE_PATH = "C://Temp//";
// private static String FILE_PATH = "/home/falinux/Temp/"; // 리눅스 패스
 
 
 public static void main(String[] args) {

  boolean isExec = true;
  while(isExec) {
   // 메뉴 선택
   String menu = selectMenu();
     
      if ("1".equals(menu)) {
    // 백업 패스파일명
    StringBuffer bakupFileNm = new StringBuffer();
    bakupFileNm.append(FILE_PATH);
    bakupFileNm.append(TABLE_NAME);
    bakupFileNm.append("_");
    bakupFileNm.append(getDateTime());
    bakupFileNm.append(".sql");
    // 백업 실행
    backUpExec(bakupFileNm.toString());
    
      } else if ("2".equals(menu)) {
       // 키보드로부터 문자열 입력받기
       Scanner sc = new Scanner(System.in);
       String fileName = "";
       while ("".equals(fileName)) {
        System.out.print("파일명을 입력하세요 : ");
        fileName = sc.nextLine();
    }
       // 복구실행
       dbImpExec(FILE_PATH+fileName);
      } else {
       isExec = false;
       System.out.println("종료하였습니다.");
      }
     
      System.out.println();
  }
 }
 
 /**
  * DB백업
  * @param backupPathNm
  * @return
  */
 public static void backUpExec(String backupPathNm) {
     // 명령어 설정
     StringBuffer cmd = new StringBuffer();
     cmd.append("mysqldump");
     cmd.append(" -u");
     cmd.append(ID);
     cmd.append(" -p");
     cmd.append(PW);
     cmd.append(" ");
     cmd.append(DB_NAME);
     cmd.append(" ");
     cmd.append(TABLE_NAME);
     cmd.append(" -r");
     cmd.append(backupPathNm);

     try {
         Process pross = Runtime.getRuntime().exec(cmd.toString());
   if (pross.waitFor() == 0) {
    System.out.println("백업 성공");
   } else {
    System.out.println("백업 실패");
   }
     } catch (IOException ioe) {
         System.out.println("Exception IO");
         ioe.printStackTrace();
     } catch (Exception e) {
         System.out.println("Exception");
         e.printStackTrace();
     }
 }
 
 /**
  * 시간 취득
  * @return
  */
 public static String getDateTime() {
  // 캘린더 인스턴스 취득
  Calendar calendar = Calendar.getInstance();
  // 날짜 취득
  Date date = calendar.getTime();
  // 날짜 형식을 yyyyMMddHHmmss로 날짜 취득
  String dateTime = (new SimpleDateFormat("yyyyMMddHHmmss").format(date));
  
  return dateTime;
 }
 
 /**
  * 데이터 복구
  * @param fileName
  */
 public static void dbImpExec(String fileName) {

  // 데이터 import
  String cmd[] = {"mysql", DB_NAME,  "-u"+ID, "-p"+PW, "-e", "source "+fileName};
  Process pross = null;
  try {
   Runtime run = Runtime.getRuntime();
   pross = run.exec(cmd);
   
   if (pross.waitFor() == 0) {
    System.out.println("복구성공");
   } else {
    System.out.println("복구실패");
   }
   
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 /**
  * 메뉴 선택
  * @return
  */
 public static String selectMenu() {
     // 키보드로부터 문자열 입력받기
     Scanner sc = new Scanner(System.in);
     System.out.println("1.백업실행");
     System.out.println("2.백업복구실행");
     System.out.println("3.종료");
     String exec = "";
     while ("".equals(exec)) {
      System.out.print("어떤것을 실행 할까요? :");
      exec = sc.nextLine();
  }
    
     return exec;
 }
}

 

 

백업실행

bakup.png

 

복구 실행

restore.png

 

 

Java로 백업이나 복구 실행을 잘 몰라서 어떻게든 돌아가게 꾸역꾸역 어거지로

썼었는데 mysql옵션을 잘사용하면 쉽게 사용할 수 있었습니다.

어떻게 알았냐구요??

구글 신께서 알려 주었습니다.^^;

 

감사합니다.