콘텐츠로 이동

설정

MySQL 설정 파일은 Windows에서는 my.ini이고, 기본 위치는 C:\Program Files\MySQL\MySQL Server X.X 폴더다.

Linux에서는 my.cnf이고, 기본 경로는 /etc/my.cnf다.

설정 파일 예시
[client]
port=3306
[mysql]
default-character-set=utf8
[mysqld]
port = 3306
#MySQL 포트 설정
socket = /tmp/mysql.sock
#MySQL 설치 디렉터리 설정. 건드리지 말 것
basedir=F:\\Hzq Soft\\MySql Server 51GA
#MySQL 데이터베이스 데이터 저장 디렉터리 설정. 원래 저장 위치의 공간이 부족하다고 느끼면 다른 곳으로 옮겨도 된다
#단, 원래 저장 디렉터리 안의 내용도 그곳으로 옮겨야 한다
datadir=F:\\Hzq Soft\\MySql Server 51GA\\data
#innodb_log_arch_dir 기본값은 datadir
#innodb_log_group_home_dir 기본값은 datadir
#MySQL 서버의 문자셋 설정. 기본 인코딩
default-character-set=utf8
#연결 요청에 대한 OS 대기열 크기. "연결 거부" 오류가 자주 나면 적당히 늘린다
back_log = 50
#TCP / IP 포트를 수신하지 않고, mysqld에 명명된 파이프로 연결한다
#skip-networking
#최대 연결 수
#이 값이 너무 작아서 플러그인이 오류를 낼 때가 있다. 65536처럼 크게 잡는 것을 권장하며, 때로는 그래도 모자란다
max_connections = 90
#테이블을 여는 스레드 수 제한. mysqld_safe로 제한을 풀지 않는 한 최대 4096
table_open_cache = 2048
#MySQL 서비스가 프로세스마다 받는 최대 쿼리 패킷 크기
max_allowed_packet = 16M
#SQL 쿼리 한 건을 처리할 때 쓰는 메모리 캐시. 한 건의 바이너리 데이터가 제한 크기를 넘으면 디스크에 공간을 만들어 처리한다. 보통 1-2M이면 충분하며 기본값은 1M
binlog_cache_size = 2M
#메모리 테이블 하나의 최대 크기 제한
max_heap_table_size = 64M
#스레드마다 할당하는 정렬 버퍼 크기
sort_buffer_size = 8M
#join 연산 버퍼 크기. 실제 사용 상황에 맞춰 설정하며 기본값은 8M
join_buffer_size = 32M
#연결이 끊긴 스레드를 몇 개까지 캐시할지
thread_cache_size = 8
#동시 실행 스레드 수. 기본값은 8이며 2배 이내로 적당히 늘릴 수 있다. CPU가 여러 개면 CPU 수를 곱하고, 듀얼 코어 CPU라면 현재 코어 수를 곱한 뒤 다시 70%~85%를 곱한다
thread_concurrency = 16
#특정 SQL 전용 캐시. 제출한 쿼리가 최근 몇 번의 쿼리 중 하나와 같고 query 캐시에 있으면 캐시의 결과를 바로 돌려준다.
query_cache_size = 64M
#위 설정과 짝을 이룬다. 쿼리 결과가 아래 설정한 크기를 넘으면 위에서 설정한 캐시에 넣지 않아서, 큰 결과 하나가 캐시를 많이 차지하는 것을 막는다.
query_cache_limit = 2M
#전문 검색의 최소 단어 길이 설정.
#ft_min_word_len = 4
#CREATE TABLE 구문의 기본 테이블 유형. 유형을 직접 지정하지 않으면 아래 줄의 유형을 쓴다
default-storage-engine = InnoDB
#스레드 스택 크기. MySQL은 자체적으로 쓰는 스택이 64K를 넘지 않는다고 한다. 이 값은 조금 높게 잡아도 된다(RCA 프로젝트에서는 모두 같은 데이터베이스 연결을 공유한다). 기본값은 192K
thread_stack = 800K
#트랜잭션 처리 수준 설정. 기본값은 REPEATABLE-READ이며 보통 그대로 쓰면 된다. 아래 두 줄은 순서대로 대응한다.
#커밋되지 않은 데이터 읽기/쓰기 가능, 커밋되지 않은 데이터의 사본을 만들어 읽기/쓰기, 커밋 전에는 읽을 수만 있고 쓸 수 없음, 트랜잭션을 직렬로만 실행.
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
transaction_isolation = REPEATABLE-READ
#메모리 임시 테이블 하나가 메모리에서 차지하는 크기. 이 값을 넘으면 자동으로 디스크 작업으로 전환된다
tmp_table_size = 64M
#바이너리 로그 기능 활성화. 이를 통해 특정 시점으로 복구해 최신 백업을 되살릴 수 있다
#log-bin=mysql-bin
#바이너리 로그 형식. 위 설정과 짝을 이루며 mixed 형식을 권장한다
#binlog_format=mixed
#위 설정과 짝을 이룬다. 쿼리 하나가 아래 설정한 시간을 넘으면 위 설정을 실행한다.
long_query_time = 2
#사용자 지정 호스트 ID. 주/부 복제나 여러 서버 사이의 식별에 쓰며 int 값이다
server-id = 1
#보통 MyISAM 테이블의 기본 키를 캐시하며, 디스크 임시 테이블의 기본 키 캐시에도 쓰인다. 위에서 디스크 임시 테이블이 여러 번 나왔으므로 MyISAM을 안 쓰더라도 작지 않은 값으로 설정하는 것이 좋다. 기본값은 32M
key_buffer_size = 56M
#MyISAM 테이블을 전체 스캔할 때 쓰는 캐시. 스레드마다 아래 줄의 크기만큼 갖는다.
read_buffer_size = 2M
#정렬 작업 시 디스크와의 사이에 쓰는 캐시. 스레드마다 할당되며 기본값은 16M
read_rnd_buffer_size = 16M
#MyISAM이 특수한 트리로 대량 삽입할 때 쓰는 캐시. 예: insert ... values(..)(..)(..)
bulk_insert_buffer_size = 64M
#MyISAM 인덱스 파일의 최대 크기 제한,
myisam_max_sort_file_size = 12G
#MyISAM 테이블에 인덱스가 여러 개면 MyISAM이 여러 스레드로 병렬 정렬할 수 있다. 하드웨어 자원을 꽤 쓰므로, 환경이 좋다면 이 값을 늘려도 된다.
myisam_repair_threads = 2
#제대로 닫히지 않은 MyISAM 테이블을 자동으로 검사하고 복구한다.
myisam_recover
# *** InnoDB specific options ***
#아래 줄을 켜면 InnoDB가 비활성화된다
#skip-innodb
#보통 설정할 필요가 없거나 설정해도 별 효과가 없다. InnoDB가 OS와 알아서 상호작용하며 추가 메모리 풀이 쓰는 InnoDB 저장 데이터 크기를 관리한다
innodb_additional_mem_pool_size = 16M
#InnoDB 전체 버퍼 풀 크기. 너무 크면 안 되고 로컬 메모리의 50%~75%가 적당하다. 로컬 개발 중에는 64M, 256M처럼 조금 작게 잡아도 된다
innodb_buffer_pool_size = 256M
#InnoDB 데이터는 하나 이상의 데이터 파일로 이루어진 테이블스페이스에 저장된다
innodb_data_file_path = ibdata1:10M:autoextend
#비동기 IO 작업에 쓰는 스레드 수. 기본값은 4이며 적당히 늘려도 된다
innodb_file_io_threads = 8
#스레드 수 안에서 허용하는 InnoDB 커널. 너무 높이지 말 것
innodb_thread_concurrency = 14
#InnoDB 트랜잭션 로그 저장 방식. 기본값은 1이며, 0으로 하면 디스크 I/0 작업이 줄어든다. 2도 있다
innodb_flush_log_at_trx_commit = 1
#InnoDB가 로그 데이터를 버퍼링하는 데 쓰는 크기
innodb_log_buffer_size = 16M
#로그 파일. 전체 캐시 크기의 25%-90%로 설정할 수 있으며 기본값은 256M. 이 항목을 바꾸려면 먼저 datadir\ib_logfileXXX를 지워야 한다
innodb_log_file_size = 256M
#로그 그룹 수. 기본값은 3
innodb_log_files_in_group = 3
#InnoDB 로그 파일 위치. 기본값은 MySQL의 datadir
#innodb_log_group_home_dir
#InnoDB 버퍼 풀에서 허용하는 더티 페이지의 최대 비율. 기본값은 90
innodb_max_dirty_pages_pct = 90
#트랜잭션 데드락 타임아웃 설정
innodb_lock_wait_timeout = 120

이 밖에 꼭 바꾸기를 권장하는 중요한 설정 항목이 있다. 설정 파일에 없는 항목은 직접 추가하면 된다.

TODO