'innodb'에 해당되는 글 1건

  1. 2010/10/12 boyo Mysql - innoDB 관련 -

Mysql - innoDB 관련 -

MYSQL 2010/10/12 17:33

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로 변경
2010/10/12 17:33 2010/10/12 17:33
TAG ,