-r옵션으로 복구하지 못하는 데이터파일의 복구방법으로 -o옵션을 사용하여 복구 할 수 있습니다.
즉, 앞의 예에서는 MYSQL의 오류난 테이블파일을 -r옵션을 사용하여 복구하는 예를 보았습니다. -r옵션을 사용하여 테이블파일을 복구하는 것은 MYSQL의 테이블복구 방법 가운데 가장 정형적인 방법입니다. 하지만 데이터의 안전성을 고려한다면 -o옵션을 사용하실 것을 권해드립니다.
따라서 myisamchk로 깨진 테이블파일의 오류를 복구할 때에 시간이 좀 더 소요되더라도 데이터의 안전성이 걱정이 되신다면 -o옵션을 사용하시기 바랍니다. -o옵션을 사용하시면 전통적인 방법으로 복구를 하며 -r옵션을 사용하시는 것보다 속도는 좀 떨어지지만 -r옵션으로 복구하지 못하는 데이터파일을 복구를 할 수 있습니다.
[root@file bin]# pwd /usr/local/mysql/bin [root@file bin]# [root@file bin]# ./myisamchk -o ../data/papa/Demo_Domain.MYI - recovering (with keycache) MyISAM-table '../data/papa/Demo_Domain.MYI' Data records: 31 [root@file bin]# |
참고로 -o옵션을 대신하여 --safe-recover를 사용할 수도 있습니다.
9 : MYSQL 테이블이 완전히 깨졌을 때의 최후의 복구방법
MYSQL의 복구유틸리티인 myisamchk로 깨지거나 오류난 테이블을 복구작업을 하였으나 잘되지 않았을 경우에 최후에 사용해 볼 수 있는 방법이 -e옵션을 사용하는 것입니다. 즉, myisamchk복구유틸리티 사용시 -e옵션을 사용하시면 복구대상 데이터파일로부터 가능한 모든 레코드들을 복구하려고 시도합니다.
한가지 주의하실 것은 복구 대상 테이블파일이 완전히 깨지거나 완전히 망가진 상태가 아니라면 이 -e옵션을 사용하시면 않됩니다. 즉, 가장 복구율이 높기도 하지만 가장 안전하지못한 방법이기도 하기 때문에 완전히 깨진 테이블파일과 같은 복구하기 힘든 경우에 마지막으로 시도하는 방법입니다.
단, -e옵션으로 테이블파일을 복구할 때에는 -r옵션을 함께 사용하여 -re와 같이 사용하시든가 아니면 -o옵션과 함께 -oe와 같은 형태로 사용하시기 바랍니다. -e옵션 하나만을 사용하시면 복구모드가 아니라 점검모드로 인식되기 때문입니다.
아래의 예는 Demo_Domain.MYI 인덱스테이블파일을 myisamchk유틸리티의 -ev옵션으로 복구작업을 한 것입니다.
[root@file bin]# pwd /usr/local/mysql/bin [root@file bin]# [root@file bin]# ./myisamchk -re ../data/papa/Demo_Domain.MYI - recovering (with sort) MyISAM-table '../data/papa/Demo_Domain.MYI' Data records: 31 - Fixing index 1 [root@file bin]# |
10 : myisamchk(isamchk)로 테이블파일 복구가 되지 않을 경우에는
지금까지 myisamchk복구유틸리티를 이용하여 깨지거나 오류난 MYSQL 테이블파일을 복구하는 방법에 대해서 알아보았습니다. 하지만 실무적인 측면에서 본다면 myisamchk(isamchk)유틸리티로 깨진 테이블을 100%복구하기란 거의 어렵다고 할 수 있습니다. 이런 경우, 즉 myisamchk나 isamchk로 복구가 되지않을 경우에 직접 서버관리자가 복구를 수작업으로 수행해 주셔야합니다.
물론, 데이터베이스의 가장 최근 백업된 파일들로 복구하는 것이 가장 안전하고 가장 현명한 복구방법이겠지만 여기서 염두에 두는 복구방법이란 백업이 되어있지않은 경우를 가정한 것입니다.
첫번째 : 테이블파일 중 테이블구조파일(*.FRM파일)로 인해 복구가 불가능할 때에
만약 myisamchk로 테이블파일을 복구할 때에 *.frm파일로 인해 복구가 되지않을 경우에는 복사해둔 *.frm파일이 있다면 이를 원래 위치에 복사를 하시면 되겠지만, 만약 복사해둔 *.frm파일이 없다면 테이블구조를 다시 만들어 주시면 됩니다. 즉, *.frm파일은 테이블의 스키마(테이블구조)를 저장하고 있는 파일이므로 최악의 경우 MYSQL에 직접 접속하여 “create table”문으로 테이블 구조를 다시 만들어 주시면 됩니다.
이때 주의하실 것은 “create table”문으로 테이블구조를 재생성하기 전에 반드시 기존의 *.MYI파일과 *.MYD파일의 원본은 백업을 해두셔야한다는 점입니다. 혹시 잘못되었을 경우를 대비하여 실제 데이터가 저장된 *.MYD와 테이블 인덱스정보가 저장된 *.MYI파일의 원본이라도 그대로 보존되어야하기 때문입니다.
이와 같이 *.FRM파일을 재생성하였다면 다시 myisamchk(isamchk)로 복구시도를 해보시기 바랍니다. 만약 *.FRM이 원인이 되어 복구되지 않았을 경우에는 이와 같은 방법으로 거의 99%는 복구가 가능합니다.
두번째 : 테이블파일 중 테이블 인덱스파일(*.MYI파일)로 인해 복구가 불가능할 때에
만약 myisamchk로 테이블파일을 복구할 때에 *.MYI파일로 인하여 복구가 안될 때에 복사해둔 *.MYI파일이 있다면 이를 원래 위치로 복사하시면 됩니다. 하지만 복사해 둔 파일이 없을 경우에는 다음과 같이 하시기 바랍니다.
주의 하실 것은 작업하기 전에 반드시 원본 *.MYD와 *.FRM파일은 백업을 해두시기 바랍니다.
그 다음 MYSQL에 접속을 하여 “delete from 테이블명”과 같은 SQL명령문으로 해당 테이블의 모든 레코드(데이터)들을 삭제합니다. 그런 다음 MYSQL을 빠져 나옵니다. 그리고 MYSQL을 종료하시고 백업해둔 *.MYD와 *.FRM파일을 다시 원래 위치로 복사합니다. 그리고 myisamchk로 다시 복구시도를 합니다.
이와 같이 *.MYI파일의 원인으로 복구가 되지 않을 경우에 위와 같은 방법을 사용하시면 거의 80%정도는 복구가 될 수 있습니다.
하지만 거듭 강조 드리는 것은 myisamchk(isamchk)를 사용하실 때에는 반드시 MYSQL을 종료한 후에 사용하라는 점입니다. 만약 MYSQL이 실행되어있는 도중에 myisamchk를 사용하신다면 복구도중 데이터의 추가/삭제/수정이 될 수 있으므로 오히려 더 심각한 에러를 유발하는 원인이 될 수도 있기 때문입니다.