본문 바로가기
DB/MySQL

Mysql 유틸리티

by 가므자 2012. 3. 27.

MySQL 유틸리티 관련 파일은 대부분 UNIX & Linux OS의 shell Prompt 상태에서 실행된다.

myisamchk
MySQL 서버를 사용하다 예기치 못한 문제가 발생하여 데이터가 손상되었을 때 테이블 타입이 InnoDB라면 트랜잭션이 적용되기 때문에 그러한 경우 데이터를 복구 가능하지만,

테이블 타입이 MyISAM(데이터 및 인덱스를 저장하기 위해 .MYD 및 .MYI 파일을 가지고 있는 테이블)이라면 데이터가 손상될 확률이 좀 더 높다. 이런 경우 myisamchk 유틸리티를 사용하면 손상된 데이트를 수동으로나마 복구할 수 있다. MyISAM 테이블로 생성된 테이블은 기본적으로 3개의 파일이 생성된다.

<테이블명>.MYI - 인덱스 파일
<테이블명>.frm - 테이블의 구조를 정의하는 파일
<테이블명>.MYD - 데이터 파일

myisamchk 유틸리티는 데이터베이스 테이블의 상태를 검사하여 손사오딘 테이블을 복구하고 최적화를 위한 정보를 가져오는 유틸이다. 테이블을 안전하게 유지, 보수하고 싶다면 주기적으로 myisamchk 를 실행하여 상태를 검사해보는 것이 좋을 것.

myisamchk 이란?

- DB 테이블에대한 오류 검사 및 오류 복구 유틸리티 이다
- 버전 3.22.x : isamchk 유틸리티 사용
3.23.x : myisamchk 유틸리티 사용

[ myisamchk 사용전 주의사항 ]

- mysql 데몬을 stop 시킨후 이 유틸리티를 사용해야함.
- mysql 데몬을 중지시킬수 없는 사항이라면 검사할 테이블에대한 rock을 걸고 검사를 수행하여야만 검사도중에 발생할수있는 오류를 막을수있다.
- 모든 작업을 항상 백업을 한후 작성을 수행하는것이 좋을것이다.

[ myisamchk 사용법 및 옵션 ]

- 해당 테이블이있는 디렉토리로 이동 ( 보통 /usr/local/mysql/var 밑에 위치함 )

1.일반적인 검사

# myisamchk [table 명]
예)
Checking MyISAM file: zz_news.MYI
Data records: 0 Deleted blocks: 0
- check file-size
- check key delete-chain
- check record delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check record links
==> 에러메시지가 없으면 테이블에 오류가 없다는것이다.

2. 옵션

# myisamchk -s,--silent [table 명]
-> 에러만 출력

# myisamchk -v,--verbose [table 명]
-> -s 옵션보다 많은 정보를 출력

# myisamchk -V
-> myisamchk 버젼을 표시

옵션의 종류 :①Global 옵션, ②체크 옵션, ③복구 옵션, ④ 그밖의 옵션

3. Global 옵션

# myisamchk -#,--debug [table 명]
-> debug 로그를 출력한다.

# myisamchk -?,--help 
-> 도움말을 출력한다. 

# myisamchk -t,--tmpdir<경로> [table 명]
-> 임시 파일의 경로를 설정한다.

# myisamchk -s,--silent [table 명]
-> 침묵 모드로 작동한다. 검사 도중 에러가 발생했을 때만 출력한다.

# myisamchk --verbose  [table 명]
-> 상세 정보를 출력한다.

# myisamchk --version
-> 버전을 출력한다.

# myisamchk --wait
->테이블에 lock이 걸려 있으면 기다린다.

4. 체크 옵션

# myisamchk -c,--check [table 명]
-> 테이블의 에러를 check 함

# myisamchk -e,--extend-check [table 명]
테이블을 좀더 세밀하게 check 함, 일반적인 방법으로 error를 찾을수없을 경우 사용

# myisamchk -F,--fast [table 명]
-> 빠른게 테이블 check 한다.정교한 체크는 하지않느다.

# myisamchk -C,--check-only-changed [table 명]
-> 테이블을 check 하고,테이블을 check 이후의 상태로 변경한다.

# myisamchk -f,--force [table 명]
-> 테이블에 error에 있을경우 강재로 check 한다.

# myisamchk -i,--information [table 명]
-> check한 결과의 정보를 통계화하여 보여준다.
예)
Checking MyISAM file: zz_news.MYI
Data records: 0 Deleted blocks: 0
- check file-size
- check key delete-chain
- check record delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check record links
Record blocks: 0 Delete blocks: 0
Record data: 0 Deleted data: 0
Lost space: 0 Linkdata: 0

User time 0.01, System time 0.00
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 26, Physical pagefaults 186, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 0, Involuntary context switches 0


#myisamchk -m,--medium-check [table 명]
-> extend-check 옵션보다 check 속도가빠르며,99.9 % 의 에러을 찾을수있다.

5.Repair 옵션

#myisamchk -o -B,--backup [table 명]
-> MYD파일을 백업한다. 형식은 [filename-time.BAK]의 파일이 생긴다.

# myisamchk -e,--extend-check [table 명]
-> 세부적인 파일까지 복구를해준다.일반적으로 아주 하찮은 에러까지 찾을수
있다.하지만 자포자기의 상태가 아니고서는 이옵션을 사용하지 않는게 좋다.

# myisamchk -f,-force [table 명]
-> 이전것의 temporary file을 덥어쒸운다.

# myisamchk -l,--no-symlinks [table 명]
-> 심복릭 링크를 따르지않겠다는 옵션이다. 일반적으로 myisamchk 는symlink points를 복구한다.

# myisamchk -r,--recover [table 명]
-> unique key를 제외한 대부분를 복구한다.

# myisamchk -n,--sort-recover [table 명]
-> sorting하면서 테이블을 복구한다. 심지어 temporary 파일과 같은 아주 큰
파일역시 sorting하면서 복구한다.

# myisamchk -o,--safe-recover [table 명]
-> -r 옵션보다 느리게 복구한다.그러나 좀더 섬세한 복구를 지원한다.

# myisamchk -q,--quick [table 명]
-> 테이터 파일의 수정없이 복구한다.

6. 기타 옵션
# myisamchk -d,--description [table 명]
-> 테이블에 대한 정보를 출력한다.

# myisamchk -S,--sort-index [table 명]
-> index 블록을 sort한다.

# myisamchk -R[index번호],--sort-records [table 명]
-> index 번호를 기준으로 인덱스를 정렬해준다.

7.검사중 아래의 메시지가출력되면 해당테이블을 사용중이라는 의미이므로 테이블에 LOCK을 걸든가 데몬을 죽이고 나서 검사 및 복구를해야함.

myisamchk: warning: 1 clients is using or hasn''t closed the table
properly

8. LOCK 걸기

myisamchk 는 테이블에대한 read 만 할수있으면 되기때문데 read 를 제외한
모든것에 lock을 걸면된다.

mysql> lock tables [table 명] READ ;
mysql> flush tables ;

flush tables 는 mysql이 테이블의 내용을 메모리에만 보관하고 실제 테이
블파일에 기록을하지 않았을경우 실제 테이블파일에 기록하라는 의미이다

9.LOCK 풀기

mysql> unlock talbe;

10.Myisamchk 로 복구를 위한 LOCK 걸기

서비스를 죽이지않고 복구를 해야할경우는 write lock를 걸어주면된다.
복구는 write 를 해야하기때문에 write lock를 걸어줘야한다.

mysql>lock tables [table명] write;
mysql>flush tables;

11.LOCK 풀기

mysql> unlock table;

 

myisamlog : MyISAM 로그 파일의 컨텐츠를 처리하는 유틸리티이다.

myisampack : MyISAM 테이블을 압축한다. 테이블에 있는 칼럼을 개별적으로 압축한다. 일반적으로 myisampack는 데이터 파일을 40~50% 정도 압축을 한다. MySQL은 압축된 테이블에 메모리 매핑을 실행 할때 mmap()를 사용한다. 만일 mmap()이 동작을 하지 않는다면, MySQL은 일반적인 읽기/쓰기 동작을 실행한다.

mysql : 대화식으로 SQL 명령문을 입력하거나 또는 배치 모드의 파일에서 이 명령문들을 실행시키기 위한 라인 툴이다. mysql은 간단한 SQL 쉘이다. mysql은 대화식 및 단 방향적인 사용을 지원해준다.

mysqlaccess : 호스트 이름, 사용자 이름, 그리고 데이터베이스 조합을 위한 접속 권한을 검사하는 스크립트이다.

mysqladmin : 데이터베이스 생성 또는 삭제, 승인 테이블 다시 읽기 테이블을 디스크로 플러시하기, 그리고 로그 파일 다시 열기 등과 같은 관리자용 유틸리티이다.

mysqlbinlog : 바이너리 로그에서 명령문을 읽어오기 위한 유틸리티이며 바이너리 로그 파일에 저장되어 있는 실행된 명령문의 로그는 서버가 크래시 된 것을 복구하기 위해서 사용될 수 있다.

mysqlcheck : 테이블 검사, 복구, 분석, 그리고 최적화를 수행하는 테이블 관리 클라이언트이다. myisamchk와 전혀 다른 방식으로 동작을 한다. 가장 주된 차이점은 mysqlcheck는 mysqld 서버가 구동될 때만 사용될 수 있는데 비해서, myisamchk는 서비가 구동되지 않는 경우에도 사용 될 수 잇다는 점이다.

mysqldump : MySQL 데이터베이스를 SQL 명령문 또는 탭으로 분리된 텍스트 파일 형태로 덤프하는 유틸리티이다. 데이터베이스를 덤프하거나 또는 백업 또는 데이터를 다른 SQL 서버(MySQL 서버가 아닌)에 전달하기 위해서 데이터베이스를 모을 때 사용하는 프로그램이다.

mysqlimport : 클라이언트 프로그램은 LOAD DATA INFILE SQL 명령문에 대해서 명령어 라인 인터페이스를 제공한다.

mysqlshow :  어떤 데이터베이스가 있고 어떤 테이블, 어떤 테이블 칼럼 또는 인덱스가 있는지를 쉽게 보여주는 프로그램

mysql_zap : 패턴과 일치하는 프로세스를 죽이는 프로그램으로 ps 명령어 및 유닉스 신호를 사용하기 때문에, 유닉스와 유닉스와 유사한 시스템에서 구동된다.

perror : 시스템 전원이 나가서 MySQL 서버가 비정상적으로 종료된 경우나 하드웨어의 결함등으로 테이블의 데이터 파일은 손상될 수 있다. 이때 에러가 출력되는데, perror 유틸리티를 사용하여 각 에러 코드가 의미하는 내용을 알아볼 수 있다.

replace : replace 유틸리티 프로그램은 파일 또는 표준 입력 값에서 스트링을 변경 시킨다

댓글