MySQL 데이터를 복구하고 싶습니다.

amplifier   
   조회 23961   추천 0    

홈페이지 서버의 Main 하드가 물리적인 베드섹터가 발생해서, 
새로운 컴퓨터에 서버를 구축하고 있습니다.

저는 홈페이지의 홈짜도 몰랐던 사람이라..
MySQL에서 data백업을 할 생각도 없이
raw파일들만 쭉 백업해 왔는데요,

이 raw data를 가지고 MySQL에 맵핑하기 위해서는 어떤 방법을 해야할까요
인터넷에 나온 내용들은 조금 어려운거 같아서 여기에 글을 적어봅니다.

첫 번째 방법은 아래와 같네요.

바이너리 로그를 활성화 해 두었을 경우에만 바이너리 로그가 쌓이므로 주의.


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에 다시 불러올 때, 저장했었던 데이터의 변수 이름이 필요할거 같은데 
이걸 모르더라도 복구가 가능할까요?

안녕하세요
짧은글 일수록 신중하게.
김황중 2014-12
어차피 단독 서버닌까
정석 무시하고 가장 간단한 복구빙법 알려 드립니다.

웹소스 그대로 이전
Mysql을 신 서버에 설치후
구 서버의 mysql 폴더내 data가 들어있는(예시 /var/mysql) 폴더를 그대로 로컬로 복사
새로 설치한 mysql폴더내 data를 복구할(예시 /var/mysql)폴더에 그대로 덮어쓰기
끝...^^

이상 쌩 초보자용 디비 복구 방법 입니다....^^
곽순현 2014-12
덤프되지 않은 파일이라면 황중님 말씀처럼 다른 서버에 같은 버전의 MySQL을 설치후 덮어쓰기가 편할 것 같네요.
송진현 2014-12
그냥 row파일 자체가 sql 구문자체니깐 순서대로 실행하면 원래 DB되요 소리인거 같네요..
amplifier 2014-12
그게 덮어 씌웠는데 데이터가 하나도 안 보이더라구요. 지금 패닉이네요.
김황중 2014-12
버전이 다른경우
아웃포트 하는 방법은 기본으로 하시면 않되듯이
기본적으로 mysql버전부터 확인하시고
동일버전을 설치 하셔야합니다.

잘 모르시겠으면 외부에 의뢰하심을....


늘 하던 사람들에게는 단순한 작업이지만
처음 하는 사람들에게는 버전조차 확인이 어려운 법이죠.

참고로 이런 류가 마이그레이션입니다.
서버 마이그레이션.... 호환성 테스트부터 의외로 어렵기때문에
서버이미지를 떠서 다른 서버로 이전을 하는 경우더 많죠.

기존 서버의 프로그램과 커스텀 셋팅을 그대로 해준다는것도 쉽지 않을때가 많거든요.
     
amplifier 2014-12
김황중님 신경써 주셔서 감사드립니다.
지금 외부에 의뢰해서 데이터를 추출해보려고 합니다.
이번 기회에 공부좀 해보아야 겠네요.

감사합니다.


QnA
제목Page 5687/5724
2014-05   5237834   정은준1
2015-12   1763558   백메가
2013-11   23522   행아범
2010-09   23539   이상룡
2013-11   23558   김민철GC
2013-04   23562   케이스
2016-03   23563   isaiah
2012-06   23599   참세상맹글기
2011-03   23601   가빠로구나
2016-12   23607   버지니아
2013-11   23653   2CPU최주희
2015-11   23653   Lucyed
2017-01   23658   김준영86
2017-11   23667   유령E정해준
2012-09   23679   미수맨
2013-11   23714   문영식
2013-03   23723   성투불패
2010-02   23727   삽질매니아
2011-05   23738  
2013-06   23741   거니네
2014-07   23743   Won낙연
2018-04   23753   정의석