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 쿼리문 추출
# /usr/local/mysql/bin/mysqlbinlog -d neulwon -s mysql-bin.000001 > mysql-bin.000001.sql
# /usr/local/mysql/bin/mysqlbinlog -d neulwon -s mysql-bin.000002 > mysql-bin.000002.sql
# /usr/local/mysql/bin/mysqlbinlog -d neulwon -s mysql-bin.000003 > mysql-bin.000003.sql
# /usr/local/mysql/bin/mysqlbinlog -d neulwon -s mysql-bin.000004 > mysql-bin.000004.sql
[옵션 설명]
-d DB명 : 바이너리 로그파일에서 해당 DB에 관한 쿼리만 추출
-s : 주석처리된 내용은 추출대상에서 제외합니다.
3. DB 삭제 및 복구
위와같이 문제발생 시간 전까지의 모든 바이너리 로그를 새로운 파일로 생성
생성된 *.sql 파일을 vi 로 열어보면 create database 에서부터 지금까지의 쿼리문이 기록되어 있다.
# mysql -p
Enter password: (mysql root 패스워드 입력)
기존에 복구하고자 하는 DB가 있을 경우 복구가 되지 않으니 해당 DB를 삭제. ( 미리 백업을 다시 해두는것이 안전)
mysql> drop database Test;
이제 아래와 같이 쿼리추출파일을 실행하여 data를 생성한다.
mysql> \. mysql-bin.000001.sql
mysql> \. mysql-bin.000002.sql
mysql> \. mysql-bin.000003.sql
mysql> \. mysql-bin.000004.sql
작업이 완료되면, select 명령어를 이용하여 해당 DB에 데이타가 정상 입력되었는지 확인.
'APM' 카테고리의 다른 글
UNION과 UNION ALL 의 차이 및 주의 사항 (0) | 2014.05.22 |
---|---|
MYSQL binary log 관리하기 (0) | 2014.05.09 |
해킹방지를 위한 fail2ban 설치 (0) | 2014.05.09 |
MySQL 암호화 방법 (0) | 2013.06.12 |
SSD를 쓰면 DBMS가 빨라질까? (0) | 2012.11.03 |
댓글