본문 바로가기
DB/MySQL

MYSQL DB복구강좌myisamchk 2편

by 가므자 2012. 3. 27.

2 : MYSQL 테이블파일의 이상유무 점검하기

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를 사용하여 복구하는 예는 바로 다음에 설명하였으므로 이 둘의 차이점을 비교해 보시기 바랍니다.

ㅇ 제작자 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 성수

ㅇ 본강좌의 자세한 정보 : http://www.superuser.co.kr/linuxcommandbible/

 

댓글