원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어
출처 : http://blog.naver.com/dreami79?Redirect=Log&logNo=60101193970

+++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
 

1. What is Innodb Table space  ?

    - 그 동안  Myisam 방식으로 테이블 스페이스를 사용하던 mysql은 rollback 이 되지 않는다.

       다른 데이터베이스 와 달리  autocommit 이 자동으로 실행 하여

       데이터 베이스의 트렌젝션시 발생되는 lock을 처리 하기 힘들었다.

   -  innodb는 오라클 처럼 shared tablespace ( ibdataN) 와 로그파일 (ib_logfileN ) 로 구성된다.

      로그파일은 트랜젝션들을 처리하는 오라클의 아카이브 로그 같이 생각 하면 된다.

 

2. Mysql의 주요 특징

   참고 : Mysql Technical Reference fo Ver 5.0 : 16장  InnodB Configureation

  -  rollback 을 구현 할수 있다.

  -  transaction isolation Level

     : READ-UNCOMMITED, READ-COMMITED, REPEATABLE-READ, SERIALIZABLE

  - innodb_buffer_pool_size

    : MyIsam 방식과 달리 buffer poll을 이용하여 인덱스와 raw data를 캐싱한다.

      따라서 사용량이 많아 지면 tablespace  Disk I/O  가 그만큼 줄어 든다

      pool의 용량은 real memory의 80% 까지 줄수 있으나,  다른 어플리 케이션과 사용시

     너무 많이 주게 되면 운영 체제의 paging을 일으키게 된다.

     ( 참고로 오라클은 SGA 를 50%로 권고 한다)

     또 32bit 시스템의 경우 2 ~ 3.5G의 제한되므로 너무 많이 주면 안된다고 한다.

 - innodb_data_file_path

    아직 오라클 같이 Shared Table Space 를 온라인상에서 추가 하기 힘들다. 

    오직 my.cnf 환경 파일로 생성이 되고 변경 된다.

      형식

     innodb_data_file_path  = [파일위치1/]파일명1:파일1사이즈:autoextend:max:MAX파일 사이즈

     파일 간의 구분자는 ";" 이고 파일의 속성 구분자는 ":" 이며

     autoextend:max:2000M 는 맨마지막 파일에만 해당된다.

innodb_file_per_table

   를 사용하면 이전 isam 같이 데이터 베이스 폴더 안에 table_name.ibd 라는 파일이 생긴다.

   사용예는 다음과 같다.

    innodb_data_home_dir=/export/DATABASE/MyData

   innodb_data_file_path = ibdata1:500M;ibdata2:500M;ibdata3:500M;ibdata4:200M:autoextend:max:2000M

 

3. InnoDB 만들기

1) Mysql 다운로드

wget http://downloads.mysql.com/archives/mysql-5.4/mysql-5.4.2-beta-linux-i686-glibc23.tar.gz

 

2) 링크걸기

tar xvfz mysql-5.4.2-beta-linux-i686-glibc23.tar.gz

mv mysql-5.4.2-beta-linux-i686-glibc23 /usr/local/mysql-5.4.2

ln -s /usr/local/mysql-5.4.2 /usr/local/mysql

 

3) 구동 스크립 등록하기

ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

 

4) InnoDb 설정

cp -pr /usr/local/mysql/support-files/my-innodb-heavy-4G.cnf /etc/my.cnf

vi /etc/my.cnf

[mysqld]

...

## 한글(euckr) 설정
character-set-client-handshake=FALSE
init_connect          = SET collation_connection=euckr_korean_ci
init_connect          = SET NAMES euckr
default-character-set = euckr
character-set-server  = euckr

collation-server      = euckr_korean_ci
language=korean

...

# 풀사이즈 조절 (디폴트 2G <- 1G)

innodb_buffer_pool_size = 1G

...

# 바이너리 로그 주석처리(필요에 따라..)

#log-bin=mysql-bin

...

log-error        = /usr/local/mysql/logs/mysql_error.log
log-slow-queries = /usr/local/mysql/logs/mysql_slow.log

...

innodb_data_file_path =ibdata1:4000M;ibdata2:100M;ibdata3:100M:autoextend
innodb_data_home_dir            = /usr/local/mysql/ibdata
innodb_log_group_home_dir       = /usr/local/mysql/iblogs
innodb_log_arch_dir             = /usr/local/mysql/iblogs

 

4. myisam -> innodb 로 바꿔보자.

1) 기존 데이터베이스 스키마 덤프

2) 기존 데이터베이스 데이타 덤프

// mysql 로그인
# mysql -u -p
Enter password : 비밀번호 (첫 접속시에는 비밀번호 없음)
// innodb 설정 상태 확인
mysql> SHOW VARIABLES LIKE 'have_innodb';

 +---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb   | YES   |
+---------------+-------+
1 row in set (0.00 sec)

// 설정 상태 확인

mysql> SHOW STATUS LIKE '%innodb%';

3) 데이터베이스 생성

mysql> create database testdb;

mysql> grant all on testdb.* to testdb  identified by 'testdb';
mysql> flush privileges;

4) 기존 데이터베이스 스키마 복구

 

 

5) 테이블 Type innodb로 변경