mysql 바이너리 파일로 DB 복구
DB작업전 반드시 data를 백업 후 작업을 진행하도록 합니다.
# cp -arp /usr/local/mysql/data /usr/local/mysql/data_bak_100406
mysql data 폴더를 보면
mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
mysql-bin.000004, ...... 등의 파일이 있습니다.
mysql 을 설치하고 부터 실행하는 모든 명령어들(create, update, delete, alter 등) 이 기록에 남는데
- 웹사이트에서 게시글 등록 등의 작업도 로그에 남습니다. -
이러한 기록을 이용하여 현재까지의 DB를 만들 수가 있습니다.
물론 문제발생 시간을 확인하여 그 전 시간까지만 복구를 해야합니다.
1. mysql 바이너리 로그 파일 확보
# mkdir /usr/local/src/mysql_bin_repair
# cp -arp /usr/local/mysql/data/mysql-bin.0* /usr/local/src/mysql_bin_repair
# cd /usr/local/src/mysql_bin_repair
2. mysql 쿼리문 추출
이제 바이너리 로그파일을 mysql 에 입력 가능한 쿼리문으로 변경해야 합니다.
# /usr/local/mysql/bin/mysqlbinlog -d sysdocu -s mysql-bin.000001 > mysql-bin.000001.sql
# /usr/local/mysql/bin/mysqlbinlog -d sysdocu -s mysql-bin.000002 > mysql-bin.000002.sql
# /usr/local/mysql/bin/mysqlbinlog -d sysdocu -s mysql-bin.000003 > mysql-bin.000003.sql
# /usr/local/mysql/bin/mysqlbinlog -d sysdocu -s mysql-bin.000004 > mysql-bin.000004.sql
[옵션 설명]
-d DB명 : 바이너리 로그파일에서 해당 DB에 관한 쿼리만 추출합니다. 예) sysdocu 이라는 DB 복구
-s : 주석처리된 내용은 추출대상에서 제외합니다.
3. DB 삭제 및 복구
위와같이 문제발생 시간 전까지의 모든 바이너리 로그를 새로운 파일로 생성을 합니다.
생성된 *.sql 파일을 vi 로 열어보면 create database 에서부터 지금까지의 쿼리문이 기록이 되어있습니다.
이제 이 쿼리문을 이용하여 DB를 복구할 수 있습니다.
# mysql -p
Enter password: (mysql root 패스워드 입력)
기존에 복구하고자 하는 DB가 있을 경우 복구가 되지 않으니 해당 DB를 삭제합니다.
mysql> drop database sysdocu;
이제 아래와 같이 쿼리추출파일을 실행하여 data를 생성합니다.
mysql> . mysql-bin.000001.sql
mysql> . mysql-bin.000002.sql
mysql> . mysql-bin.000003.sql
mysql> . mysql-bin.000004.sql
복구가 완료되었습니다. select 명령어를 이용하여 해당 DB에 데이타가 정상 입력되었는지 확인해봅니다.
'리눅스 > MySQL' 카테고리의 다른 글
select 결과를 파일로 저장하기 (0) | 2015.01.16 |
---|---|
latin1 DB data를 euckr DB 로 넣기 (iconv 이용) (0) | 2015.01.16 |
테이블내 특정 문자 치환 방법 (SQL Injection 공격 복구) (0) | 2015.01.16 |
예약어로 인해 복구가 되지 않을경우 (0) | 2015.01.16 |
[error] checking "LinuxThreads"... "Not found" (0) | 2015.01.16 |