MySQL에서 my.cnf에서 알아야 하는 중요한 세팅값을 정리해본다. 가장 많이 사용하고 중요한 옵션만 설명했다.

해당 설명은 전적으로 <Real MySQL(지은이: 이성욱, 출판사: 위키북스)> 를 참조했음 밝힌다(강력추천)

설정값 설명
server-id MySQL 고유식별값
datadir 데이터파일이 저장되는 디렉토리
tmpdir MySQL에서는 정렬, 그룹핑시 내부적으로 임시테이블을 생성하는데 그 임시테이블의 저장위치
default-storage-engine MySQL내에서 사용할 스토리지 엔진
skip-name-resolve 클라이언트가 접속하면 접속이 허용된 사용자인지 클라이언트의 ip를 이용해서 역으로 DNS명을 가져온다. 이러한 작업은 시간이 다소 걸리기 때문에 보다 빠른 접속을 위해서 이러한 역 DNS 검색을 하지 않도록 하기 위해 이 변수명을 기재하면 된다.
max_connection 접속할 수 있는 최대 클라이언트 수. 해당 값을 수천 수만으로 높이면 장애가능성이 높아진다.
max_allowed_packet 클라이언트의 최대허용 패킷. 만약 BLOB이나 TEXT타입의 컬럼이 엄청나게 크다면 이값을 늘려야 한다.
sort_buffer_size 인덱스를 사용할 수 없는 정렬이나 그룹핑에 메모리 공간을 얼마나 할당할지 정한다. 가장 적정한 값은 64KB~512KB 수준이다.
query_cache_size 쿼리 캐시에 대한 사이즈. 128MB는 넘지 않게 하는것이 좋다.
innodb_buffer_pool_size InnoDB 스토리지 엔진의 버퍼풀은 디스크의 데이터를 메모리에 캐싱함과 동시에 데이터의 변경을 버퍼링하는 역할을 한다.
innodb_additional_mem_pool_size Innodb자체적으로 각 테이블의 메타정보나 통계정보를 저장하기 위한 메모리 사이즈. 일반적으로 테이블의 개수가 1000개 미만이면 16MB정도 그 이상이면 32MB 정도가 적당하다.
innodb_file_per_table 이 변수를 1로 설정하면 테이블 단위로 각각 1개씩 테이터 파일과 테이블 스페이스를 생성한다. 하나의 테이블 스페이스에 모든 테이블이 저장되는 경우에는 테이블이 삭제되어도 테이블 스페이스가 점유했던 공간은 반납되지 않기 때문에 주로 1로 설정해서 사용하는 것이 좋다.
innodb_log_buffer_size 데이터가 변경될 경우 메모리 일시적으로 로그를 버퍼링한다. 일반적으로 16~32MB 면 충분하다.
innodb_flush_log_at_trx_commit 트랜젝션이 커밋될 때마다 로그를 디스크에 플러시할지 결정하는 옵션이다. 만약 많은 양의 데이터를 한꺼번에 저장할 경우에 이값을 0이상으로 설정하면 디스크입출력에 상당한 영향을 주어 성능이 저하된다. 데이터가 조금 손실되어서 무방할때 0으로 세팅하면 상당히 성능이 개선된다.
log-bin, max_binlog_size, expire_logs_days 복제(리플리케이션)를 사용하려면 반드시 사용해야 하는 옵션이다. 마스터에서 기록된 로그를 바탕으로 슬레이브에서 실행되기 때문이다. log-bin 옵션에는 로그파일명을 정한다. max_binlog_size는 최대 로그파일 크기를 제한한다. expire_logs_days는 로그를 최대 저장하는 기간을 설정한다.
read_only 복제를 사용할 경우 슬레이브는 보통 읽기 저장으로 사용한다.