Jiniya

WEB

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

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