My-sql이 깨지거나 잘못된 테이블 파일을 복구하는 유틸입니다

*.MYD : 해당테이블의 데이터가 저장되는 테이블 데이터파일입니다. 

-> 실제 데이터를 저장하는 데이터 파일

*.MYI : 해당테이블의 인덱스정보가 저장되는 테이블 인덱스파일입니다.

-> 인덱스 정보를 저장하는 인덱스파일

*.frm : 해당테이블의 테이블구조가 저장되는 테이블스키마파일입니다.

-> 테이블 구조가 저장된 테이블 스키마 파일

isamchk ISAM테이블파일을 대상으로 수정 및 복구를 하는 용도로 사용이 되고

myisamchk MYISAM테이블파일을 대상으로 수정 및 복구하는 용도로 사용이 됩니다


MYSQL 3.23버전 이전에는 MYSQL의 인덱스파일로서 *.ISM파일형식을 사용하였고 

MYSQL 3.23버전 이후에는 *.MYI파일형식을 현재까지 사용하고 있습니다.  

따라서 사용하시는 MYSQL의 버전이 3.23이전버전이면 isamchk로 복구하시고 

3.23이후 버전이면 myisamchk를 사용하여 복구하시면 됩니다.


*.ISM -> isamchk

*.MYI -> myisamchk


한가지 주의하실 것은 myisamchk isamchk든 복구 대상파일은 반드시 MYSQL의 인덱스파일이라는 것입니다, *.ISM파일(isamchk)이나 *.MYI파일(myisamchk)파일이 그 대상이될 뿐 다른 파일은 그 대상의 되지 못한다는 점 꼭 기억하시기 바랍니다.


[주의사항]  반드시 MYSQL종료 후에 myisamchk(isamchk) 사용하십시요 

myisamchk(isamchk)를 사용하실 때에는 반드시 MYSQL을 종료한 후에 사용하시기 바랍니다.  만약 MYSQL이 실행되어있는 도중에 myisamchk를 사용하신다면 복구도중 데이터의 추가/삭제/수정이 될 수 있으므로 오히려 더 심각한 상황을 유발하는 원인이 될 수도 있기 때문입니다복구 유틸리티인 myisamchk의 설명보다 필자는 MYSQL 종료 후에 사용하실 것을 더욱 강조하고 있습니다.


1. 기능. 
- 손상된 테이블을 점검하고, 복구하고, 테이블 정보를 출력하고, 인덱스 키 분포를 해석하고, 인덱스를 사용가능하게 하거나 불가능하게 하는 등의 일을 한다. 

2. 사용법. 
myisamchk [options] tablename[.MYI] ... 
isamchk [options] tablename [.ISM] .... 

3. 주요 옵션 리스트. 
- myisamchk와 isamchk 둘 모두에서 사용가능한 옵션 정리. 

1) --analyze, -a 
-> 키분포 해석을 수행 한다. 이는 서버가 인덱스 기반 검색과 조인을 보다 빠르게 수행할 수 있도록 도와준다. --description과 --verbose 옵션을 같이 사용해서 키분포에 대한 정보를 얻을 수 있다. 

2) --block-search=n, -b n 
-> 블록 n 에서 시작하는 블록을 포함하는 테이블 열의 시작을 출력해 낸다. 
이는 오직 디버깅을 위한 것이다. 

3) --description , -d 
-> 해당 테이블에 대한 서술적인 정보를 출력한다. 

4) --extend-check, -e 
-> 확장된 테이블 점검을 수행한다. 이 옵션은 거의 사용할 필요가 없는데, 
myisamchk와 isamchk가 보통 한단계 낮은 확장된 점검모드로 에러를 찾기 때문이다. 

5) --force, -f 
-> 테이블에 대한 임시 파일이 이미 존재 한다 해도, 테이블을 강제로 검사하거나 수리한다. 

6) --information, -i 
-> 테이블 내용에 대한 통계적인 정보를 출력한다. 

7) --keys-used=n, -k n 
-> --recover 옵션과 함께 사용된다. isamchk 에 대해서는 MySQL은 오직 처음 n개의 인덱스만 갱신한다. 다른말로 n보다 큰 숫자의 인덱스들을 비활성화로 만든다. myisamchk 에서는 n은 사용할 인덱스를 가리키는 비트 마스크이다. 

8) --no-symlinks, -l 
-> 테이블 인자가 심벌릭 링크이면, 보통 심벌릭 링크가 가리키는 테이블이 수리된다. 

9) --quick, -q (boolean) 
-> --recover 와 함께 사용되며, --recover만 사용했을때보다 수리가 더 빨라진다. 

10) --recover, -r 
-> 복구 작업을 수행한다. 

11) --safe-recover, -o 
-> --recover 방법보다 더 느린 복구 방법이지만, --recover가 하지 못하는 몇가지 문제를 고칠수 있다. --safe-recover는 또한 --recover보다 적은 디스크 공간을 사용한다. 

12) --sort-index, -S 
-> 계속되는 복구에 대해 순차적인 블록 읽기 속도를 높이기 위해 인덱스 블록들을 정렬한다. 

13) --sort-records=n, -R n 
-> 인덱스 n 내에 레코드가 나열된 순서에 따라 데이터 레코드들을 정렬한다. 

14) --unpack, -u 
-> 묶인 파일을 풀어낸다. myisamchk는 myisampack으로 , isamchk은 pack_isam으로 묶인 파일을 풀어낸다. 

15) --wait, -w 
-> 테이블이 잠겼다면 사용 가능할때까지 기다린다. 


- myisamchk에서만 사용 가능한 옵션 리스트. 

1) --back , -B 
-> 데이터 파일 (.MYD)을 수정하는 옵션에 대해서, tbl_name-time.BAK 형태의 
파일명을 가진 백업 파일명을 만든다. time은 타임 스탬프 값을 나타낸다. 

2) --check, -c 
-> 테이블 에러를 점검. 

3) --check-only-changed, -C 
-> 마지막 점검 이후로 변경되지 않은 테이블을 점검한다. 

4) --correct-checksum 
-> CHECKSUM=1 로 생성된 테이블에 대해서, 테이블내의 해당 체크섬 정보가 올바른지 확인한다. (MySQL-4.0.0 에서 추가됨) 

5) --data-file-length=n, -D n 
-> 꽉 차게 되는 데이터 파일을 재구성 할때, 데이터 파일에 허용되는 최대길이. 
(이 옵션은 --recover나 --safe-recover 와 함께 사용시에 효과가 있다.) 

6) --fast, -F 
-> 테이블들이 적절하게 닫히지 않은 경우에만 점검 한다. 

7) --medium-check, -m 
-> --extend-check 보다 빠른 방법을 사용하지만 다소 덜 철저하게 테이블을 점검한다. 

8) --parallel-recover, -p 
-> --recover 에 관해서만 복구 작업을 수행한다. (MySQL 4.0.2에서 추가된 옵션) 

9) --read-only, -T 
-> 해당 테이블을 점검되어진 것으로 표시하지 않는다. 

10) --set-auto_increment [ = n ], -A [n] 
-> 시퀀스값들이 n에서 시작하도록 AUTO_INCREMENT 계수기를 설정한다. 

11) --set-character-set=charset 
-> 인덱스 재구축시, 주어진 문자 세트의 차례 순서를 사용하여 인덱스 항목의 
순서를 정한다. 

12) --sort-recover, -n 
-> 임시 파일이 굉장히 커지는 동작을 수행해야 하는 경우라도 정렬된 복구를 강제한다. 

13) --start-check-pos=n 
-> 위치 n 에서 데이터 파일 읽기를 시작한다. 

14) --tmpdir=dir_name, -t dir_name 
-> 임시 파일들을 위해 사용되는 디렉토리 경로명. 

15) --update-state, -U 
-> 상태를 나타내도록 테이블에 저장된 내부 블래그를 갱신한다. 

- myisamchk 와 isamchk 에서 사용 가능한 변수 정리 

1) key_buffer_size 
-> 인덱스 블록들에 사용되는 버퍼의 크기. 

2) read_buffer_size 
-> 읽기 블록들에 사용되는 버퍼의 크기. 

3) write_buffer_size 
-> 쓰기 블록들에 사용되는 버퍼의 크기. 

4) sort_buffer_size 
-> 키값 정렬 작업에 사용되는 버퍼 크기. 

5) sort_key_blocks 
-> 인덱스에 대해 사용되는 B-트리 구조의 깊이에 관련됨. 

6) decode_bits 
-> 압축된 테이블들을 부호화 할 때 사용되는 비트수. 

7) ft_max_word_len 
-> FULLTEXT 인덱스안에 포함될 수 있는 단어들의 최대 길이. 

8) ft_max_word_len_for_sort 
-> FULLTEXT 인덱스 안으로 삽입되기에 충분히 짧다고 생각되는 단어들의 길이. 

9) ft_min_word_len 
-> FULLTEXT 인덱스 안에 포함 될 수 있는 단어들의 최소 길이. 

10) myisam_block_size 
-> 인덱스 블록들을 위해 사용된 블록 크기. 


myisamchk -o -r *.*     //복구할 파일들 (DATABASE) 데이타 베이스 깨졌을 시 복구




백업을 받은 bak파일을 복원을 할 경우(Management Too을 이용하거나 osql 명령어로~) 


위의 이미지 같은 에러가 뜹니다.

이상하게 이 에러가 안 뜰 경우도 있기는 한데, 업체 DB를 백업 받아서 테스트 할려고 제 DB에 복원 할 때 뜨드라구요 =ㅇ=;;

복원  시에 이 에러를 안 뜨게 하는 방법은 Management Tool에서 복원을 할 때 옵션을 주면 되는데~

1. 복구할 DB를 선택해서 작업 > 복원 > 데이터베이스를 선택합니다. 



2. 일반에서 복원할 대상 백업 파일(*.bak)을 선택하고
   옵션탭으로 가셔서 기존 데이터베이스 덮어쓰기(O) 라는 옵션을 체크 합니다~



이렇게 하고 확인을 누르면 에러가 뜨지 않고 복원 ㄱㄱㄱ~~

OSQL에서 이런 명령이 있는 지 모르겠지만... (귀찮음에 알아보지는 않았네요 ;;)






1. MSDE 설치
MSDE를 MS사로부터 다운로드 받아 실행을 하면 특정 폴더에 압축이 풀립니다.
DOS 창에서 해당 경로를 들어간 후
 
SETUP.EXE SAPWD="sa암호" DISABLENETWORKPROTOCOLS=0 SECURITYMODE=SQL

위의 설정은 매우 중요합니다

안하고 하시면 엔진 날리고 다시 설치 하는 경우가 발생 할 수 있어요 ㄷㄷ

SAPWD : SQL 서버의 system admin(sa)의 로그인 암호
DISABLENETWORKPROTOCOLS : DISABLENETWORKPROTOCOLS=1로 설치하거나
                            DISABLENETWORKPROTOCOLS 옵션을 넣지 않았을 경우 해당 시스템 외의 다른 컴퓨터나 다른 서버스에서
                            SQL Server(MSDE)로 접근을 하지 못하게 됩니다. 
SECURITYMODE : SECURITYMODE=SQL 옵션을 주지 않을 경우 윈도우즈 인증 모드로 MSDE가 설치되며 
                            이로 인해 몇몇 서비스가 SQL서버에 로그인을 하지 못하는 경우도 발생합니다.


2. 기존 MSDE를 Service Pack3a 적용할 경우
MSDE가 있는 DOS 창에서
 
SETUP.EXE /UPGRADESP SQLRUN UPGRADEUSER=sa UPGRADEPWD=sa암호
 
라고 입력하시면 됩니다.
 
다만 현재 MS사에서 배포하는 MSDE의 경우 ServicePack 3a가 적용된 제품이므로 MSDE를 업그레이드(서비스팩 3 적용)할 경우는 극히 희박하다 보여집니다.


3. osql.exe 유틸리티를 이용한 MSDE 데이터베이스 접속
DOS 창에서
 
osql.exe -U sa -P sa암호
 
라고 입력을 하시면 1> 이라는 프롬프트가 뜨게 됩니다.
 
*Note : 굳이 osql에 대해 설명하는 이유는 MSDE에는 SQL Server Enterprise 관리자 유틸리티가 제외 되어있습니다. 또한 쿼리분석기도 없습니다. 다른 컴퓨터에 있는 SQL Server Enterprise 관리자 유틸리티를 이용해 MSDE 서버를 붙여서 작업할 경우에는 아래와 같은 작업이 필요치 않으나 MSDE만 있다는 가정하에 데이터베이스를 백업하고 복구하는 방법을 나열해봅니다.
 
 
4. Pubs 데이터 베이스로 이동하기.
1>USE Pubs
2>GO
 
라고 입력을 하시면 제대로 이동이 되었다면 1> 이라는 프롬프트가 다시 뜨게 됩니다. 해당 데이터 베이스가 없다면
데이터베이스 명을 다시 입력하라는 메시지가 뜹니다.
 
 
5. 데이터베이스 백업 모델 변경하기(단순 모델에서 대량 로그 모델로 변경하기)
1>ALTER DATABASE Pubs SET RECOVERY bulk_logged
2>GO
 
 
6. Pubs 데이터베이스 백업하기
1>BACKUP DATABASE Pubs TO DISK='C:\TEMP\DB_BACKUP\Pubs_BK20041115' WITH INIT
2>GO
라고 입력하면
1 파일에서 'Pubs' 데이터베이스, 'Pubs_dat' 파일에 대해 176페이지를 처리했습니다.
1 파일에서 'Pubs' 데이터베이스, 'Pubs_log' 파일에 대해 1페이지를 처리했습니다.
BACKUP DATABASE이(가) 177페이지를 0.282초(5.116MB/초)만에 처리했습니다.
 
와 같은 메시지가 나옵니다. 물론 페이지 수와 속도 등은 해당 시스템마다 다릅니다.
 
DISK='경로명' 에 백업 파일의 경로와 이름을 입력해주시면 됩니다. 그리고 맨 뒤에 WITH INIT 옵션을 붙여 주시면 됩니다.
 
 
7. Pubs 로그 백업하기
1>BACKUP LOG Pubs TO DISK='C:\TEMP\DB_BACKUP\Pubs_Log_BK20041115' WITH INIT
2>GO
라고 입력합니다.
-이하 메시지 생략-
 
 
8. Pubs 데이터베이스 복구하기
1>USE MASTER
2>GO
2>RESTORE DATABASE Pubs FROM DISK='C:\TEMP\DB_BACKUP\Pubs_BK20041115' WITH NORECOVERY
3>GO
라고 입력합니다.
다만 WITH NORECOVERY 라고 맨 뒤에 입력하는 이유는 복구 할 것이 더 남았다는 것을 SQL 서버에 알려주기 위해서 입니다.
 
위에 USE MASTER로 MASTER 데이터베이스로 이동한 이유는(MASTER 데이터베이스는 MS SQL 서버 혹은 MSDE가 설치될 경우 기본으로 설치되는
데이터베이스 입니다.) Pubs 데이터 베이스에 접속되어있는 경우 해당 데이터베이스가 사용되고 있기때문에 복구할 수 없다라는 시스템 메시지가
나오기 때문입니다.
-이하 메시지 생략-
 
 
9. Pubs 로그 복구하기
1>RESTORE LOG Pubs FROM DISK='C:\TEMP\DB_BACKUP\Pubs_Log_BK20041115'
2>GO

원본 : 모르겠씀요 ;
 
 

+ Recent posts