2009년 9월 17일 목요일

MySQL 설정 및 innoDB 설정

[Fedora 9] MySQL 설정 및 innoDB 설정 - 위즈군의 라이프로그


2.1 innodb 설정

이 글에서는 간단한 설명과 설정 위주로 하고, 넘어 가겠습니다. mysql에서 스토리지 엔진(Storage Engine)으로 사용하는 방식은 기본으로 MyISAM입니다. MyISAM은 일반적인 입출력 상황에 최적화된 기본 엔진 입니다. 하지만 웹서비스와 같이 로딩이 많은 서비스에서 더 좋은 성능을 위한 다른 스토리지 엔진이 innodb입니다. 간단하게 innodb는 데이터를 처리하는 엔진으로 로딩이 많은 데이터처리 엔진이라고 생각하면 됩니다.
스토리지 엔진에 대해 자세히 알고 싶으시면 "MySQL Storage Engine"를 참고하세요.
그럼 설정 방법을 알아 보겠습니다.

// 설정파일 편집
# vi /etc/my.cnf
// ftp 서버 시작 (컴파일 설치)
innodb_data_home_dir = /var/lib/mysql/idb
innodb_data_file_path = ibdata1:256M:autoextend:max:2000M
innodb_log_group_home_dir = /var/lib/mysql/idb
innodb_log_arch_dir = /var/lib/mysql/idb
innodb_buffer_pool_size = 2G
innodb_additional_mem_pool_size = 16M
innodb_log_file_size = 512M
innodb_log_buffer_size = 2M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_flush_method = O_DSYNC
max_connections = 500
// mysql 재시작
# /etc/init.d/mysqld restart
// 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%';

+-----------------------------------+---------+
| Variable_name | Value |
+-----------------------------------+---------+
| Com_show_innodb_status | 0 |
| Innodb_buffer_pool_pages_data | 178 |
| Innodb_buffer_pool_pages_dirty | 0 |
| Innodb_buffer_pool_pages_flushed | 189 |
| Innodb_buffer_pool_pages_free | 8013 |
| Innodb_buffer_pool_pages_latched | 0 |
| Innodb_buffer_pool_pages_misc | 1 |
| Innodb_buffer_pool_pages_total | 8192 |
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead_seq | 0 |
| Innodb_buffer_pool_read_requests | 1398 |
| Innodb_buffer_pool_reads | 0 |
| Innodb_buffer_pool_wait_free | 0 |
| Innodb_buffer_pool_write_requests | 1174 |
| Innodb_data_fsyncs | 6 |
| Innodb_data_pending_fsyncs | 0 |
| Innodb_data_pending_reads | 0 |
| Innodb_data_pending_writes | 0 |
| Innodb_data_read | 0 |
| Innodb_data_reads | 0 |
| Innodb_data_writes | 338 |
| Innodb_data_written | 3399680 |
| Innodb_dblwr_pages_written | 16 |
| Innodb_dblwr_writes | 1 |
| Innodb_log_waits | 0 |
| Innodb_log_write_requests | 75 |
| Innodb_log_writes | 4 |
| Innodb_os_log_fsyncs | 0 |
| Innodb_os_log_pending_fsyncs | 0 |
| Innodb_os_log_pending_writes | 0 |
| Innodb_os_log_written | 37376 |
| Innodb_page_size | 16384 |
| Innodb_pages_created | 178 |
| Innodb_pages_read | 0 |
| Innodb_pages_written | 189 |
| Innodb_row_lock_current_waits | 0 |
| Innodb_row_lock_time | 0 |
| Innodb_row_lock_time_avg | 0 |
| Innodb_row_lock_time_max | 0 |
| Innodb_row_lock_waits | 0 |
| Innodb_rows_deleted | 0 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_read | 0 |
| Innodb_rows_updated | 0 |
+-----------------------------------+---------+
44 rows in set (0.00 sec)


// 데이터베이스 변경
# use wizdb;
// innodb 적용
mysql> ALTER TABLE testtable type=innodb;

Query OK, 0 rows affected (0.29 sec)
Records: 0 Duplicates: 0 Warnings: 0


// 테이블 상태 확인
# mysql> SHOW TABLE STATUS;

innodb_data_home_dir = /var/lib/mysql/idb
- innodb 홈디렉터리 경로를 설정 합니다.
innodb_data_file_path = ibdata1:256M:autoextend:max:2000M
- 데티터 파일 옵션을 설정 합니다. 파일명 : 초기용량 : 자동증가 : 최대사이즈
innodb_log_group_home_dir = /var/lib/mysql/idb
innodb_log_arch_dir = /var/lib/mysql/idb
- 로그 디렉터리 정보
innodb_buffer_pool_size = 2G
- innodb에서 사용할 메모리 양으로 전체 메모리의 50~80% 정도로 설정
innodb_additional_mem_pool_size = 16M
innodb_log_file_size = 512M
- 로그 파일 사이즈로 버퍼풀 사이즈의 25% 정도로 설정
innodb_log_buffer_size = 2M
- 로그 버퍼 사이즈로 성능에 맞춰 로그를 기록하는 경우 크게 설정
innodb_flush_log_at_trx_commit = 2
- 커밋 로그 옵션으로 성능 최적화로 1분마다 저장되도록 2로 설정
innodb_lock_wait_timeout = 50
innodb_flush_method = O_DSYNC
- 성능을 위해 메모리에서 직접 액세스 하도록 설정

기타 상세옵션과 최적화 관련 정보는 아래 참고 링크를 통해서 확인 해주세요.

2.2 DB 생성 및 사용자 설정

// mysql 관리자 비밀번호 설정
# mysqladmin -u root password '설정비밀번호'
// mysql 접속
# mysql -u -p
Enter password : 비밀번호
// DB 생성
mysql> CREATE DATABASE wizdata; // wizdata는 사용하고자 하는 DB이름 설정
// 사용자 추가 및 권한 설정
mysql> GRANT ALL ON [DB이름].* TO [사용자ID]@[접속호스트] IDENTIFIED BY 'password' WITH GRANT OPTION;
예) mysql> GRANT ALL ON wizdata.* TO wiz@localhost IDENTIFIED BY '********' WITH GRANT OPTION;
// 설정 적용
mysql> FLUSH PRIVILEGES;

좀더 많은 MySQL 사용법은 인터넷을 참고하시면 좋을 것 같습니다.


댓글 없음:

댓글 쓰기