DB/MySQL

삭제된 데이터 복구하기

채윤아빠 2010. 7. 11. 17:33
728x90
반응형
서론
DELETE나 TRUNCATE TABLE 명령을 통하여 삭제된 데이터를 복구하는 방법을 알아보겠습니다.
BinamiRedmine을 윈도우즈 서버에 새로 설치하여 프로젝트를 관리하려던 중에 기존에 사용하던 Mangis의 이슈를 옮겨오는 작업을 하던 중에 Redmine의 모든 데이터가 없어져 버리는 사태가 발생하였습니다.
참 난감한 순간이었는데... MySQL에 쌓여있는 로그를 가지고 복구가 가능했습니다.


해결방법
MySQL 툴 중에 ""라는 명령 도구가 있습니다.
이를 이용하면 MySQL이 쌓아 놓은 로그를 바탕으로 삭제된 데이터를 살릴 수 있습니다.
일반적으로 MySQL 서버에서 실행된 모든 쿼리가 data 디렉토리 아래에 xxx-bin.000001, xxx-bin.000002와 같은 파일이 생성되어 있습니다. 이 파일들에 서버에서 수행되었던 모든 SQL이 저장되어 있는데, 이 로그에서 "mysqlbinlog" 명령줄 도구를 이용하여 다시 SQL 쿼리구문을 뽑아내고, 그 쿼리 구문들 중에서 삽입 및 갱신 관련 쿼리들만 추려서 MySQL에서 수행하면 삭제된 데이터를 복구할 수 있습니다.

먼저 다음과 같이 mysqlbinlog 명령줄 도구를 이용하여 로그 파일에서 쿼리를 만들어 냅니다.("xxx-bin.000001" 등의 파일이 위치해 있는 MySQL data 디렉토리 아래에서 실행합니다.)
# mysqlbinlog msyql-bin.000001 > rescue1.sql 
# mysqlbinlog msyql-bin.000002 > rescue2.sql
# mysqlbinlog msyql-bin.000003 > rescue3.sql
그리고 나서 생성된 쿼리 파일에서 불필요한 것들을 제거하고, 복구할 것만 남겨두고 다음과 같이 MySQL 서버에서 실행하여 데이터를 복구합니다.
# mysql -u root -p DB < rescue1.sql
password: 
# mysql -u root -p DB < rescue2.sql
password: 
# mysql -u root -p DB < rescue3.sql
password: 

참고자료