- 트랜잭션을 지원하느냐의 차이 
MyISAM과 InnoDB를 구분하는 가장 큰 특징은 트랜잭션 관리 지원 유무로 볼 수 있을 것 같다. 

즉 트랜잭션처리가 필요하고 높은 퍼포먼스를 요구하는 대용량 사이트 등에서는 InnoDB 사용이 효율적이고, 반면 트랜잭션 처리가 필요없고, 주로 DB 조회(read) 작업이 많은 소규모 사이트인 경우 MyISAM이 효율적일 것이다. 

http://blog.naver.com/leeyangachi?Redirect=Log&logNo=30035817140 " MySQL 스토리지 엔진 MyISAM과 InnoDB의 차이점" 

http://blog.naver.com/paradox1573?Redirect=Log&logNo=40027258413 "MyISAM과 InnoDB의 차이점과 성능비교" 

대표적으로 MyISAM과 InnoDB가 많이 사용되며, 
MyISAM은 주료 SELECT가 많은 업무에 효과적이며, 
InnoDB는 데이터 변경이 많은 업무에 효과적입니다 

MyISAM은 속도가 빠른반면 transaction을 지원하지 않고, 
InnoDB는 속도가 느린반면 transaction을 지원합니다 

MyISAM에서는 transaction을 지원하지 않기 때문에 commit을 하지 않아도 자동 오토커밋입니다 
transaction을 사용하기 위해서는 InnoDB를 사용해야 합니다. 
[출처] 
http://tarrega.springnote.com/pages/4306441 

■ innodb 
Datafile 
데이타량이 많을 경우 MyISAM에 비해 빠르다고 함.  (Select는 빠르고 insert, update는 느리다고 함) 
shared datafile (인덱스와 데이터 공간이 공유) 
innodb_file_per_table를 설정하면 테이블 단위의 데이터 파일로 분리가 된다. 

그러나 테이블 정보는 메인 shared datafile에 저장된다. 
MyIsam에 비해 약 1.5~2.5배 정도 파일이 커짐 
데이터 량이 감소하더라도 증가된 테이터 파일 사이즈는 그대로임. 
(optimize table '테이블'을 수행하면 리사이징 된다.) 

Transaction 
ib_logfileN log파일을 통하여 대량의 트랜젝션을 버퍼링하고 serialization을 한다. 
로그파일은 최소 2개의 그룹이며, 서로 rotate 스위칭되며 갱싱되 데이터를 파일로 적용한다. 
Trasaction 이외에 Foreign Key, Trigger 를 지원 

속도 
인덱스와 데이타 파일이 같은 파일에 있어 속도가 느리다. 

대량의 insert, update가 일어 나면 fragment가 발생되어 더 느려진다. 

백업 
테이블 단위의 hot backup(파일복사)가 불가능하고, 
mysqldump나 db전체적인 복사가 필요하다. 
백업에 반드시 메인 sharedDB파일도 같이 이루어 져야한다. 

기타 특징 
SELECT COUNT(*)시 일일히 테이블의 레코드 수를 구한다고 함.(현재 버전도?) 
행(Row)단위 Lock을 사용 


■ MyISAM 
Datafile 
인덱스(.MYI)와 데이터 파일(.MYD)가 분리 
innodb보다 파일 크기가 작다. 

Transaction 
테이블 락을 기본으로 insert, update, delete가 이루어 진다. 

속도 
인덱스와 데이터 파일이 테이블 단위 이므로 속도가 빠르다. 

백업 
테이블 단위의 hot backup(파일 복사)을 할 수 있다. 
테이블 파일만 있더라도 복구가 가능하다. 

기타 특징 
Table단위 Lock사용 
COUNT(*) 정보를 별도 저장 

[출처] 
http://mulder3062.springnote.com/pages/1925054 



■ ISAM(Indexed Sequential Access Method) 
빠른 데이터 검색을 위한 파일 시스템 구조이다. 
IBM 메인프레임 컴퓨터를 위해 개발되었으며, 관계형 데이터베이스 등에서 저장 구조로 활용되고 있다. 

MySQL은 현재 MyISAM,ISAM,BDB,InnoDB,HEAP,Marge 타입의 테이블을 지원합니다. 
ISAM은 3.22이하 버전에서 MySQL에서 사용되던 타입이고, 
MyISAM은 ISAM의 단점을 보완한 업그레이드 버전이다. 


// 

- 디폴트로 생성되는 MyISAM 타입 
MySQL Version 3.23 부터 테이블 타입에 
MyISAM type 과 ISAM type 을 모두 지원합니다. 
기존 ISAM type을 사용할 수 있으며, 기본적으로 새로운 테이블은 MyISAM type 으로 생성됩니다. 
(mysqld 실행시 --default-table-type=isam 옵션을 주지 않았을 때) 

- DB를 구성하는 확장자 
ISAM 의 확장자는 .frm  .ISD .ISM 
MyISAM 의 확장자는 .frm .MYD .MYI  이다. 

- 지원되는 테이블 사이즈 
ISAM type 에서 하나의 table size 4 Gb 까지 지원되던게, 
MyISAM type 에서 800만 Tb 까지 가능하답니다. 
물론 Linux ext2 fs 에서 파일 하나의 size 가 최대 2 Gb 이므로 size 에 서 느끼는 차이는 없을 듯. 

-  ISAM 에서 MyISAM 으로 변환 
ISAM table 을 MyISAM table 로 변환이 가능합니다. 
(ALTER TABLE 을 이용하거나, 펄 스크립트 mysql_convert_table_format 
를 이용.) 
사용법 : ./mysql_convert_table_format database [tables] 
보통 mysql_convert_table_format 스크립트는 /usr/local/mysql/bin 에 존재


- 테이블 존재 확인
SHOW TABLES LIKE [테이블 명]

있을 경우 테이블 정보 
없을 경우 Empty


- 필드 존재 확인
SHOW COLUMNS FROM [테이블 명] LIKE '필드명'

있을 경우 필드 정보
없을 경우 Empty 



 - 테이블 생성 하기(기본)
CREATE [테이블 명] (
   [필드 명] Varchar(크기), 
   [필드 명] float,   
   [필드 명] INT,
   [필드 명] Mediumtext
)

- 테이블에 필드 추가하기

ALTER TABLE [테이블 명] ADD [필드 명] Varchar(크기)
ALTER TABLE [테이블 명] ADD [필드 명] float
ALTER TABLE [테이블 명] ADD [필드 명] INT
ALTER TABLE [테이블 명] ADD [필드 명] Mediumtext
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) 데이타 베이스 깨졌을 시 복구



+ Recent posts