2010년 1월 2일 토요일

[팁][MySQL] 깨진 테이블 복구

[문제]
가끔씩 DB가 Crash되거나 불안정하게 작동할 때 혹은 "mysqldump"시 에러가 날 때 인덱스를 다시 설정하는 과정이다.
실제 물리적인 하드에 에러가 나서 DB파일인 MYI파일이 손상되었을 때는 적용을 해도 완전히 복구되지 않을 수 있다.

[설정]
필수 : root 권한으로 로그인 해야 한다.
가정 : DB명 = test / 깨진 테이블명 = crash 로 가정하고 설명을 진행한다.
정보
- 일반적으로 "/var/lib/mysql/DB명"에 테이블명.MYD/테이블명.MYI/테이블명.frm 3개 파일이 생성된다.
- 여기에서는 /var/lib/mysql/test/crash.MYD (crash.MYI crash.frm)로 가정한다.

[해결과정]
1. MySQL데몬을 중지한다.
2. 모든 데이터베이스 원본파일들을 백업한다.
3. 복구명령을 내린다.(= myisamchk)
4. MySQL데몬을 다시 시작한다.

[내용]
# /etc/rc.d/init.d/mysqld stop  // 데몬 중지
# tar cvfpz 20010102-DB_test_crash-backup.tgz /var/lib/mysql/*   // 만약을 위해 백업
# myisamchk -r /var/lib/mysql/test/crash.MYD    // 복구명령
# /etc/rc.d/init.d/mysqld start // 데몬 재시작

[응용]
정상적인 DB파일들이라면, myisamchk 으로 DB를 체크하는 것은 별 문제가 없다.
한번에 깨진 테이블과 혹시 모를 나머지도 한꺼번에 체크를 하자.

# myisamchk -r /var/lib/mysql/test/*.MYD    // 모든 테이블 파일 복구명령

혹시 한번으로 복구가 되지 않으면 한번더 해보자. (실제 요번 복구는 3번에 걸쳐서 이루어졌다.)

[사족]
mysqldump를 통해 DB를 백업하는데 많이 쓰는 테이블(접속경로를 기록하는 테이블)이 크래쉬되었다고 나와서 복구를 하는 과정에
깜짝 놀랐다.. 이 테이블을 고치니.. 갑자기 "공지사항"게시판에 글들이 모두 날라가는 사고가 있었고....
"공지사항"을 복구하니 나머지 2개의 게시판의 글이 다 날라가고....

잠시 당황했던 정신을 차리고 하나하나 순서대로 진행을 하니..
다행히 모든 테이블이 살아났다. (여기서 백업의 중요성을 다시 한번 깨달음..ㅠ.ㅠ 땀 삐질..~~)
공교롭게도 얼마전 윈도우7을 까는 과정에 컴퓨터의 하드디스크도 날라가 버려서... 백업해 두었던 모든 파일이 날라가 버리는....으..

결론은.... 백업을 생활화 합시다. (죽도록 후회말고 매일 매일 백업 또 빽업...... ^^)

[ 본 글은 "불의 신전"(http://ahura.co.kr)에서 발행한 "최종 편집본"입니다. 저작권은 아후라(ahura.co.kr@gmail.com ) 에게 있으며, 이 저작권 문구를 포함하고, 원문 훼손을 하지 않으시면 어디서든 사용하실 수 있습니다. ]

댓글 없음:

댓글 쓰기