인생에 뜻을 세우는데 있어 늦은 때라곤 없다

WEB/DB

삭제된 MySQL DB 데이터 복구방법

projin 2016. 7. 22. 10:04

delete나 truncate 같은 명령으로 데이터를 지웠을때 복구하는 방법이다.

mysql의 모든 명령들은 로그를 남기기때문에 얼마든지 가능하다.



우선 mysql의 DB가 쌓이는 디렉토리로 이동한다.

대부분 /usr/local/mysql/data /usr/local/mysql/var 등으로 설정되어 있을 것이다.

 


그 해당 디렉토리로 이동하면 xxx-bin.001 xxx-bin.002 같은 바이너리 파일들이 존재 할 것이다.


버전 및 컴파일 설치 옵션에 따라 경로나 파일명이 조금 틀릴 수는 있으나 대부분 ib_logfile0과 같이 logfile이라는 느낌이 강한


파일로 어딘가에는 저장이 되어 있을 것이다.

이게 바로 DB를 첨 생성할때부터 지금까지 쌓여온 로그인데 이 파일을 활용하면 삭제된 데이터도 얼마든지 살릴수 있는 것이다.

바이너리 파일이기때문에 그냥 접근면 당근 문자들이 깨져보이고


mysqlbinlog 명령을 이용해서 사용해야한다.




다음은 그 실행예제이다.


일단 DB 디렉토리로 이동한다.

# cd /usr/local/mysql/data


바이너리 파일을 소스파일로 변환한다.

# ../mysqlbinlog xxx-bin.002 > res.sql


필요한 구문만 가져온다.

# grep "insert" res.sql > res1.sql


이렇게 하시면 rescue1.sql은 지금까지의 인서트구문으로 재작성된다.

여기서 적당히 필요없는 부분은 지우면 된다.


이제 필요한 부분만 추려서 DB에 넣으면 복구 끝인것이다.

# mysql -u 계정아이디 -p DB이름 < res1.sql




innodb로 된 mysql frm ibd 파일만 있을 경우 table 복구 하기



LIST