[MariaDB] DB 복구하기

     

     

    MariaDB, DB 복구하기

     

     

     

     

      복구하기 위해 필요한 자료

    Table은 frm과 ibd로 구성되어있다.

     DB가 날아가지 않았어도, 실행되지 않으면 백업을 할 수가 없다.

    프로그램으로도, dump로도 접근이 불가능한 참사가 이루어진다.

     

    보통 접속 못 하는 이유에 대해서는 여러 가지 문제가 있지만, db백업이 필요한 시점에서는 설정값을 건드는 것 또한 쉽지 않다.

    건드는 순간 안의 데이터가 어떻게 될지 모르기 때문이다.

     

    따라서, DB를 백업하기 위해서는 최소한 DB의 저장 위치를 확보해야 한다.

     

     

    보통 DB는  /var/lib/mysql 안에 자신의 db명으로 들어있다.

    여기에는 procedure, function 같은 PL은 들어있지 않다.

     

     

    frm은 Table의 Column값이 들어있다.

    ibd는 Table의 insert 내용이 들어있다.

     

     

     

     

      dbsake 설치하기

    curl -s http://get.dbsake.net > dbsake
    
    chmod 700 dbsake
    
    ./dbsake --version

    frm을 풀기 위해서는 dbsake가 필요하다.

     dbsake를 설치한다.   설치가 모두 되었다면 version 입력 시 다음과 같이 dbsake가 들어있다.

    dbsake는 frm을 읽기 위해 필요한 도구이다.

     

     

     

    ./dbsake frmdump Table명.frm

    dbsake가 있으면, Table이 어떻게 만들어졌는지 확인 가능하다.

    frm을 frmdump 한 결과 해당 Table이 어떻게 구성이 되어있는지 보여준다.

    저 내용을 복사 붙여 넣기 하면 Table이 완성된다.

     

     

     

      Insert 내용 뽑기 및 붙여놓기

    ALTER TABLE 테이블명 DISCARD TABLESPACE;

    DISCARD 명령어로 frm과 ibd를 불리한다.

     해당 Table을 create 할 경우, Table이 생성이 된다.

    이에 따라 처음 알려준 DB경로에 frm과 ibd가 새롭게 생성된다.

     

    DB는 frm과 ibd가 한 세트다.

    해당 DB가 있는 디렉터리로 갔을 경우 새롭게 생성된 Table의 frm과 ibd가 존재한다.

     

    여기서 당연하겠지만, 새로 생성된 ibd는 필요하지가 않다.

     

    따라서, 새로 생성된 ibd는 버리도록 해야 한다.

     

     

    mv /root/테이블명.ibd .		#ibd 옮기기
    
    chown mysql.mysql 테이블명.*	#mysql이 읽을 수 있도록 권한 변경하기
    
    
    chmod 777 *			#해당 위치에 있는 모든 것을 모든 권한 주기(안 해도 됨)
    ll

    이 부분은  Linux의 명령어가 들어가는 부분이다.

     

    먼저 backup 된 ibd를 새롭게 생성된 ibd 대신 넣는다.

    외부에서 온 ibd의 읽을 수 있는 권한은 보통 현재의 계정일 확률이 매우 높다.

     

     

    그래서 mysql로 변환시킬 필요가 있다.

     

    chmod는 간혹 가다가 읽지 못하는 경우가 있어서 777로 임의로 주게 되었다.

    ll 명령어로 해당 파일의 권한이 mysql로 변환되어있는지 최종 확인 하자.

     

     

    ibd가 옮겨졌다면, import 실행한다.

    하고 나서 마무리는 항상 commit .  !!!!

     

     

     

      결과

    해당 내용이 정상적으로 insert 된 것을 확인할 수 있다.

     DB가 날아가지는 않았지만, DB가 정상적으로 실행이 되지 않아 당황했다.

    DB의 실행 여부를 떠나 backup이 되지 않아 어떻게든 최신의 data가 필요했고 해당 방법을 통해 최신의 data를 복구할 수 있게 되었다.

     

     

     

      정리

     1. backup 된 디렉터리를 준비한다.

    2. dbsake를 설치한다.

    3. ./dbsake frmdump [ table 명]. frm으로 해당 Table의 Option을 가져온다.

    4. DB에 접속해서 CREATE 명령어로 Table을 만든다.

    5. ALTER TABLE [ TABLE명 ] DISCARD TABLESPASE; 를 실행해서 frm과 ibd의 연결을 풀어버린다.

    6. DB 디렉터리에 접속해서 backup 한 ibd를 문제의 ibd와 바꾼다.

    7. DB에 접속한다.

    8. ALTER TABLE [ TABLE 명 ] IMPORT TABLESPACE; 를 실행해서 frm과 ibd 연결시킨다.

    9. commit;   완료

     

     

     

    1. 막일 심각하다. Backup 하는 습관을 기르도록 하자!

     

    반응형

    댓글

    Designed by JB FACTORY