[DB] Mysql에서 innodb 설치 및 옵션 설명
1. 설치가 안되어 있을 때
1) 설치 여부 확인
mysql> show variables like 'have_innodb';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb | NO |
+---------------+-------+
1 row in set (0.00 sec)
2) 2가지의 설치 방법
@ mysql 설치 시에 configure 추가 설치(or 재컴파일 설치)
configure 시에 option 추가( --with-plugins=innobase)
./configure --prefix=/usr/local/mysql --with-charset=euckr --with-extra-charsets=all --with-plugins=innobase 옵션 추가
@ 설치된 mysql에 plugins 설치
my.cnf 파일 설정 추가
#vi /etc/my.cnf
[mysqld] [mysqld] 밑에 2줄 추가
ignore-builtin-innodb
plugin-load=innodb=ha_innodb_plugin.so
mysql 재시작
2. 설치는 되어있지만 사용 설정이 없을 때
1) 설치 여부 확인
mysql> show variables like 'have_innodb';
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| have_innodb | DISABLED |
+---------------+----------+
1 row in set (0.00 sec)
2) my.cnf 설정 변경
#vi /etc/my.cnf 내용 중에 skip-innodb검색 후 주석처리
#skip-innodb
Mysql 재시작
3. innodb를 default 설정
#vi /etc/my.cnf
[mysqld]
default-table-type=innodb 추가 후 재시작
4. 발생할 수 있는 에러
1) InnoDB: Error: data file /usr/local/mysql/data/ibdata1 is of a different size (innodb 에러)
#vi /usr/local/mysql/var/[도메인].err 로그 확인 시
InnoDB: Error: data file /usr/local/mysql/data/ibdata1 is of a different size
InnoDB: 640 pages (rounded down to MB)
InnoDB: than specified in the .cnf file 128000 pages!
InnoDB: Could not open or create data files.
InnoDB: If you tried to add new data files, and it failed here,
InnoDB: you should now edit innodb_data_file_path in my.cnf back
InnoDB: to what it was, and remove the new ibdata files InnoDB created
InnoDB: in this failed attempt. InnoDB only wrote those files full of
InnoDB: zeros, but did not yet use them in any way. But be careful: do not
InnoDB: remove old data files which contain your precious data!
#vi /etc/my.cnf 설정 내역 확인
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
innodb_data_file_path = ibdata1:10M;ibdata2:10M:autoextend 10M로 변경
2) InnoDB 실제 pages값(640 Pages)과 my.cnf의 pages값(128000 Pages)이 틀려 발생하는 에러
1 page = memory 16Kbyets
640 pages = 10Mbytes
128000 pages = 2000Mbytes
관련링크 : http://www.mail-archive.com/mysql@lists.mysql.com/msg76029.html
5. 옵션 설명
#vi /etc/my.cnf
[mysqld]
……
innodb_data_home_dir = /usr/local/mysql/data/innordb/
innodb_log_group_home_dir = /usr/local/mysql/data/innordb/
innodb_data_file_path = innordata1:256M:autoextend:max:2000M
innodb_autoextend_increment = 10M
innodb_file_per_table
innodb_buffer_pool_size = 2G
innodb_additional_mem_pool_size = 20M
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 512M
innodb_log_buffer_size = 2M
innodb_lock_wait_timeout = 50
innodb_flush_method = O_DSYNC
max_connections = 500
A. innodb_data_home_dir
: 테이블스페이스 파일의 생성 위치 설정
B. innodb_data_file_path
: 테이블스페이스 파일 명 및 크기, 옵션 설정
innordata1:256M:autoextend:max:2000M
innordata1라는 파일명으로 생성되고 256MB의 고정크기로 최초 생성되며, 용량이 256MB가 넘을 경우 “autoextend”라는 옵션으로 자동으로 파일 크기가 확장되며, 최대 확장되는 크기는 MAX 옵션의 설정 값만큼 확장
C. innodb_autoextend_increment
: autoextend 옵션으로 자동 확장되는 크기 지정, 디폴트는 8M
D. innodb_file_per_table
: 공용 테이블스페이스 사용 대신에 테이블 별 테이블스페이스 사용 옵션
TableName.idb 파일 생성
E. innodb_log_group_home_dir
: 로그 파일에 대한 디렉토리 경로 설정
F. innodb_buffer_pool_size
: 자신의 테이블에 있는 데이터와 인덱스를 캐시하기 위해 사용하는 메모리 버퍼의 크기, 이 값을 크게 설정하면 할수록, 테이블에 있는 데이터를 접속하는데 필요한 I/O가 덜 생김, 전체 메모리의 60~80%로 설정
G. innodb_additional_mem_pool_size
: InnoDB가 데이터 디렉토리 정보와 다른 내부 데이터 구조를 저장하기 위해 사용하는 메모리 풀의 크기
H. innodb_flush_log_at_trx_commit
: 자신의 테이블에 있는 데이터와 인덱스를 캐시하기 위해 사용하는 메모리 버퍼의 크기, 이 값을 크게 설정하면 할수록, 테이블에 있는 데이터를 접속하는데 필요한 I/O가 덜 생김, 전체 메모리의 60~80%로 설정
I. innodb_flush_log_at_trx_commit
: commit 을 하였을때 그 즉시 commit 된 데이터를 log file 에 기록할지 안할지를 설정
0 - log buffer내용이 1초 간격으로 로그파일에 쓰여지고 flush, commit시 미동작
1 - log buffer내용이 commit할 때에 로그 파일에 쓰여지고 flush
2 - log buffer내용이 commit할 때에 로그 파일에 쓰여지고 flush는 1초 간격으로 동작
J. innodb_log_buffer_size
: InnoDB가 로그 파일을 디스크에 쓰기 위해 사용하는 버퍼의 크기. 사용 가능한 크기는 1~8MB, 디폴트는1MB.
K. innodb_log_file_size
: 로그 파일의 크기 설정, 디폴트는 5MB, 로그 파일은 하나의 파일에 계속 저장되는 것이 아니고 순차적으로 파일이 일정한 크기와 용량으로 순환식으로 생성, innodb_buffer_pool_size의 25% 정도로 설정.
L. innodb_lock_wait_timeout
: 트랜젝션의 타임아웃은 롤백이 진행되기 전에 락을 대기하는 시간, 디폴트는 50.
M. innodb_flush_method
: Flush 명령어 방식 설정, 디폴트는 fdatasync.
fdatasync - fsync()를 사용해서 데이터와 로그 파일을 flush
O_SYNC - 로그 파일을 열고 flush하지만, 데이터 파일을 flush하기 위해서는 fsync()를 사용
O_DIRECT - O_DIRECT를 사용해서 데이터 파일을 열고, 데이터 파일과 로그 파일을 flush (몇몇 GNU/Linux 버전에서 사용 가능함)
※ Windows에서는 flush 방식은 항상 async_unbuffered 사용
N. innodb_thread_concurrency
: InnoDB 내부에 OS 쓰레드의 숫자 설정, 설정된 값과 같거나 적게 유지, 권장하는 값은 여러분이 사용하는 시스템의 프로세스와 디스크의 전체 합, 설정 값의 범위는 0~100.
3. InnoDB Table 생성(Default Engine이 InnoDB가 아닐 경우)
가. Table 생성시
: InnoDB 테이블을 생성하기 위해서는, CREATE TABLE 명령문에서 ENGINE = InnoDB 옵션을 지정한다:
CREATE TABLE customers (a INT, b CHAR (20), INDEX (a)) ENGINE=InnoDB;
나. MyISAM 테이블을 InnoDB로 변환
: Alter문 사용하여 변경
ALTER TABLE tablename ENGINE=INNODB;