MYSQL의 테이블 점검(복구)유틸리티인 myisamchk를 이용하여 특정 테이블의 이상유무를 점검할 수 있습니다. 테이블의 이상유무를 가장 간단히 점검하려면 myisamchk사용시 아무런 옵션없이 그냥 테이블파일만 지정해 주시면 됩니다.
여기서 예로들고 있는 실제 데이터들의 위치는/usr/local/mysql/data/papa/으로 가정하겠습니다. 실제 필자가 테스트로 사용하고 있는 데이터베이스명이 papa이며, papa라는 데이터베이스의 테이블파일이 존재하고있는 위치가 /usr/local/mysql/data/papa/이기 때문입니다.
그리고 앞서 말씀드린바와 같이 MYSQL의 복구 유틸리티인 myisamchk의 위치는 /usr/local/mysql/bin/myisamchk임을 꼭 기억하시고 다음 설명을 보시기 바랍니다.
아래는 myisamchk의 점검대상인 papa데이터베이스의 테이블파일들을 ls명령어로 확인한 것입니다.
[root@file bin]# pwd /usr/local/mysql/bin [root@file bin]# [root@file bin]# ls -l ../data/papa/ 합계 56 -rw-rw---- 1 mysql mysql 2652 2월 12 23:20 Demo_Domain.MYD -rw-rw---- 1 mysql mysql 2048 2월 12 23:23 Demo_Domain.MYI -rw-rw---- 1 mysql mysql 8940 1월 6 11:27 Demo_Domain.frm -rw-rw---- 1 mysql mysql 28 1월 6 11:27 Demo_DomainAdmin.MYD -rw-rw---- 1 mysql mysql 2048 1월 7 00:51 Demo_DomainAdmin.MYI -rw-rw---- 1 mysql mysql 8598 1월 6 11:27 Demo_DomainAdmin.frm -rw-rw---- 1 mysql mysql 0 1월 6 11:27 Demo_DomainDrop.MYD -rw-rw---- 1 mysql mysql 1024 1월 6 11:27 Demo_DomainDrop.MYI -rw-rw---- 1 mysql mysql 8626 1월 6 11:27 Demo_DomainDrop.frm [root@file bin]# |
다음은 myisamchk를 이용하여 /usr/local/mysql/data/papa/에 위치해 있는 테이블 인덱스파일(*.MYI)의 이상유무를 간단히 점검한 예입니다. 즉, Demo_Domain.MYI파일의 이상유무를 가장 간단한 방법으로 점검한 예입니다.
[root@file bin]# pwd /usr/local/mysql/bin [root@file bin]# [root@file bin]# ./myisamchk ../data/papa/Demo_Domain.MYI Checking MyISAM file: ../data/papa/Demo_Domain.MYI Data records: 31 Deleted blocks: 0 - check file-size - check key delete-chain - check record delete-chain - check index reference - check data record references index: 1 - check record links [root@file bin]# |
테이블파일의 이상유무를 점검할 때에는 -c라는 옵션을 사용하셔도 동일한 점검을 하실 수 있습니다. 다음은 -c옵션을 사용하여 Demo_Domain.MYI파일의 이상유무를 점검한 예입니다.
[root@file bin]# ./myisamchk -c ../data/papa/Demo_Domain.MYI Checking MyISAM file: ../data/papa/Demo_Domain.MYI Data records: 31 Deleted blocks: 0 - check file-size - check key delete-chain - check record delete-chain - check index reference - check data record references index: 1 - check record links [root@file bin]# |
참고로 -c옵션 대신에 --check옵션을 사용하셔도 됩니다.
3 : MYSQL 테이블 점검시 이상발견시만 알려주기
MYSQL의 테이블복구 유틸리티인 myisamchk로 테이블파일을 점검(복구)하다보면 가끔씩 불필요한 메시지로 짜증날 때가 있습니다. 이때 -s옵션을 사용하시면 에러발생시에만 (only print errors) 에러내용을 출력하므로 불필요한 메시지는 출력되지 않습니다.
다음 예는 Demo_Domain.MYI파일의 점검을 하면서 에러발견시에만 메시지를 출력하고 그외에는 아무런 메시지도 출력하지 않도록하기 위하여 -s옵션(silent)을 사용한 것입니다.
[root@file bin]# pwd /usr/local/mysql/bin [root@file bin]# [root@file bin]# ./myisamchk -s ../data/papa/Demo_Domain.MYI [root@file bin]# |
참고로 -s옵션 대신에 --silent옵션을 사용하셔도 됩니다.
4 : MYSQL의 테이블 점검(복구)시 가능한 상세하게 메시지 출력하기
MYSQL의 복구 유틸리티인 myisamchk를 이용하여 테이블파일의 점검(복구)를 할 때에 -s옵션과는 반대로 -v옵션(verbose)을 사용하시면 가능한 상세한 메시지를 출력해 줍니다.
아래의 예는 Demo_Domain.MYI라는 테이블 인덱스파일을 myisamchk로 점검할 때에 가능한 자세한 메시지를 출력하기 위하여 -v옵션을 사용한 것입니다.
[root@file bin]# pwd /usr/local/mysql/bin [root@file bin]# [root@file bin]# ./myisamchk -v ../data/papa/Demo_Domain.MYI Checking MyISAM file: ../data/papa/Demo_Domain.MYI Data records: 31 Deleted blocks: 0 - check file-size - check key delete-chain block_size 1024: - check record delete-chain No recordlinks - check index reference - check data record references index: 1 - check record links [root@file bin]# |
참고로 -v옵션 대신에 --verbose를 사용하셔도 됩니다.
5 : MYSQL의 테이블 이상유무 점검시 결과를 상세히 종합하여 보여주기
MYSQL의 테이블 복구유틸리티인 myisamchk로 특정 테이블파일을 점검한 결과를 가장 상세하게 종합하여 보여주는 옵션이 -i입니다. 즉, -i옵션을 사용하여 특정 테이블의 이상유무를 점검하면 테이블의 에러사항을 종합적으로 점검하여 그 결과를 상세히 보여줍니다.
아래의 예는 myisamchk를 이용하여 Demo_Domain.MYI파일의 이상유무를 점검한 결과입니다.
[root@file bin]# pwd /usr/local/mysql/bin [root@file bin]# [root@file bin]# ./myisamchk -i ../data/papa/Demo_Domain.MYI Checking MyISAM file: ../data/papa/Demo_Domain.MYI Data records: 31 Deleted blocks: 0 - check file-size - check key delete-chain - check record delete-chain - check index reference - check data record references index: 1 Key: 1: Keyblocks used: 18% Packed: 0% Max levels: 1 Total: Keyblocks used: 18% Packed: 0% - check record links Records: 31 M.recordlength: 81 Packed: 0% Recordspace used: 99% Empty space: 0% Blocks/Record: 1.00 Record blocks: 31 Delete blocks: 0 Record data: 2521 Deleted data: 0 Lost space: 20 Linkdata: 111 User time 0.01, System time 0.00 Maximum resident set size 0, Integral resident set size 0 Non-physical pagefaults 27, Physical pagefaults 185, Swaps 0 Blocks in 0 out 0, Messages in 0 out 0, Signals 0 Voluntary context switches 0, Involuntary context switches 0 [root@file bin]# |
위의 결과를 보시는 바와 같이 지금까지의 점검결과 중 그 결과를 가장 상세하게 종합하여 출력하고 있다는 것을 아실 수 있습니다.
참고로 -i옵션은 --information을 사용하셔도 됩니다.
6 : MYSQL 의 특정테이블 이상유무를 가장 정밀하게 점검하기
MYSQL의 테이블 복구유틸리티인 myisamchk로 특정 테이블파일을 점검할 때에 가장 완전하고 정밀한 결과를 원하신다면 -e옵션을 사용하시기 바랍니다. 특정 테이블의 이상유무를 점검하기 위하여 사용하는 모든 옵션들 가운데 가장 정밀하고 깊이있는 점검을 해주는 옵션입니다.
주의하실 점은 -r이나 -o옵션을 사용하여 테이블을 복구할 때에 -e옵션을 사용하실 때에는 세심한 주의를 요하는 옵션입니다. (-r이나 -o옵션과 함께 사용되는 복구시의 -e옵션 설명을 참조 하십시요.) 하지만 단순히 점검을 위해 -e만을 사용할 때에는 가장 정확한 결과를 보여주므로 안심하시고 사용하셔도 됩니다.
참고로 -e옵션을 사용하실 때에는 가능한 아래의 예와 같이 -v옵션과 함께 사용하시기 바랍니다. 아래의 예는 myisamchk를 이용하여 Demo_Domain.MYI파일의 이상유무를 -e와 -v를 함께 사용한 결과를 나타낸 것입니다.
[root@file bin]# pwd /usr/local/mysql/bin [root@file bin]# [root@file bin]# ./myisamchk -ev ../data/papa/Demo_Domain.MYI Checking MyISAM file: ../data/papa/Demo_Domain.MYI Data records: 31 Deleted blocks: 0 - check file-size - check key delete-chain block_size 1024: - check record delete-chain No recordlinks - check index reference - check data record references index: 1 - check records and index references [root@file bin]# |
참고로 -e 옵션은 --extend-check를 대신 사용할 수도 있습니다.
7 : 정형적인 방법으로 MYSQL의 깨진 테이블파일 복구하기
MYSQL의 복구 유틸리티인 myisamchk를 이용하여 깨지거나 오류난 테이블파일의 복구를 할 수 있습니다. 지금까지의 myisamchk의 예는 오류점검을 하는 예들이였다면 지금 부터는 실제로 복구를 하는 예입니다. 즉, myisamchk로 오류난 테이블파일의 복구를 할 때에는 -r옵션을 사용하시면 됩니다.
단, 한가지 알아두실 것은 유일(unique)하지않은 unique키값을 가진 데이터는 -r옵션으로 복구하는 대상에서 제외된다는 점입니다. 이는 데이터의 안전성을 위한 것이므로 알아두시기 바랍니다.
다음은 -r옵션을 사용하여 Demo_Domain.MYI 테이블파일을 복구하기 위하여 -r옵션을 사용한 예입니다. 참고로 필자의 경우에는 -r옵션을 사용할 때에는 복구내역의 자세한 메시지를 보기 위하여 -v옵션과 함께 사용합니다. 즉, -rv을 복구옵션으로 주로 사용합니다.
[root@file bin]# pwd /usr/local/mysql/bin [root@file bin]# [root@file bin]# ./myisamchk -rv ../data/papa/Demo_Domain.MYI - recovering (with sort) MyISAM-table '../data/papa/Demo_Domain.MYI' Data records: 31 - Fixing index 1 - Searching for keys, allocating buffer for 134 keys - Dumping 31 keys [root@file bin]# |
참고로 -r옵션을 대신하여 --recover옵션을 사용할 수도 있습니다.
깨지거나 에러난 테이블파일을 복구하는 방법에는 이번에 설명드린 -r옵션 외에도 -o옵션이 있습니다. -o를 사용하여 복구하는 예는 바로 다음에 설명하였으므로 이 둘의 차이점을 비교해 보시기 바랍니다.