Skip to content
난이도 문제은행 6

서버 설정과 시스템 변수 ​

버퍼 크기·타임아웃처럼 MySQL 동작을 정하는 설정값을 시스템 변수(system variable)라 한다. 범위(글로벌·세션)와 변경(정적·동적)이라는 두 축, 그리고 값을 저장하는 my.cnf·PERSIST만 알면 된다.

두 축 ​

글로벌(global) 값은 서버 전체에 적용되고, 새로 접속하는 커넥션이 물려받는 기본값이 된다. 세션(session) 값은 지금 내 커넥션에만 적용된다.

글로벌세션
의미서버 전체·새 접속 기본값내 커넥션 한정
조회@@GLOBAL.x@@SESSION.x (@@x는 세션 우선)
예max_connectionsautocommit

표의 max_connections는 최대 동시 접속 수다. autocommit은 문장 하나를 실행할 때마다 바로 확정할지 정하는 자동 커밋(autocommit) 스위치다.

정적(static) 변수는 서버를 재시작해야 바뀌고, 동적(dynamic) 변수는 실행 중에 SET으로 바로 바뀐다.

정적동적
변경재시작 필요SET으로 즉시
예innodb_page_sizelong_query_time

innodb_page_size는 InnoDB 페이지(page) 크기를 정하는 변수로, MySQL이 처음 초기화될 때만 정할 수 있고 재시작으로도 바꿀 수 없다. long_query_time은 느린 쿼리로 기록할 기준 시간이다.

모든 변수가 두 범위를 다 갖지는 않는다. 세션 범위가 없는 변수를 세션 값으로 바꾸려 하면 에러가 난다. 반대로 세션 범위만 있어서 글로벌로 바꿀 수 없는 변수도 있다. SHOW VARIABLES는 세션 값을, SHOW GLOBAL VARIABLES는 글로벌 값을 보여 준다.

저장: my.cnf와 PERSIST ​

  • my.cnf: MySQL이 시작할 때 읽는 설정 파일(옵션 파일, option file)이다. 리눅스에서는 보통 /etc/my.cnf나 /etc/mysql/ 아래에 있다. 파일이라 재시작해도 남는다. 서버 설정은 서버 프로그램(mysqld)용인 [mysqld] 섹션에 적는다.
  • SET PERSIST: 글로벌 값을 즉시 바꾸고, 데이터 디렉터리(data directory)의 자동 옵션 파일 mysqld-auto.cnf에도 기록한다. 재시작 후 이 파일이 다시 적용된다.
  • SET PERSIST_ONLY: 실행 중 값은 건드리지 않고 다음 시작에 적용할 값만 기록한다. 시작할 때만 바꿀 수 있는 변수에 유용하다.
  • SET GLOBAL만 하면 재시작할 때 값이 날아간다. "바꿨는데 재시작하니 돌아왔다"의 원인이 이것이다.
sql
SET GLOBAL slow_query_log = ON;       -- 지금만
SET PERSIST slow_query_log = ON;      -- 재시작 후에도
RESET PERSIST slow_query_log;         -- 저장값 제거(현재 값은 그대로)

면접 포인트 ​

  • "GLOBAL과 SESSION의 차이?" → 서버 전체·새 접속 vs 내 커넥션.
  • "재시작해도 남기려면?" → my.cnf 또는 SET PERSIST.
  • "지금 값은 안 바꾸고 다음 시작부터라면?" → SET PERSIST_ONLY.
  • "정적 변수의 예?" → innodb_buffer_pool_instances·데이터 디렉터리(datadir). 페이지 크기(innodb_page_size)는 재시작으로도 못 바꾸고 초기화 때만 정한다. 버퍼 풀(buffer pool) 크기는 5.7부터 재시작 없이 동적 조정 가능.

관련 문서