바이너리 로그를 활성화 해 두었을 경우에만 바이너리 로그가 쌓이므로 주의.
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에 데이타가 정상 입력되었는지 확인.
정석 무시하고 가장 간단한 복구빙법 알려 드립니다.
웹소스 그대로 이전
Mysql을 신 서버에 설치후
구 서버의 mysql 폴더내 data가 들어있는(예시 /var/mysql) 폴더를 그대로 로컬로 복사
새로 설치한 mysql폴더내 data를 복구할(예시 /var/mysql)폴더에 그대로 덮어쓰기
끝...^^
이상 쌩 초보자용 디비 복구 방법 입니다....^^
아웃포트 하는 방법은 기본으로 하시면 않되듯이
기본적으로 mysql버전부터 확인하시고
동일버전을 설치 하셔야합니다.
잘 모르시겠으면 외부에 의뢰하심을....
늘 하던 사람들에게는 단순한 작업이지만
처음 하는 사람들에게는 버전조차 확인이 어려운 법이죠.
참고로 이런 류가 마이그레이션입니다.
서버 마이그레이션.... 호환성 테스트부터 의외로 어렵기때문에
서버이미지를 떠서 다른 서버로 이전을 하는 경우더 많죠.
기존 서버의 프로그램과 커스텀 셋팅을 그대로 해준다는것도 쉽지 않을때가 많거든요.
지금 외부에 의뢰해서 데이터를 추출해보려고 합니다.
이번 기회에 공부좀 해보아야 겠네요.
감사합니다.