유닉스 계열의 MySQL 서버에서 my.cnf라는 설정 파일을 사용한다.
윈도우는 my.ini 파일을 사용한다.
MySQL에서 사용하는 파일을 찾으려면 mysql -help라는 명령어를 입력하여 여러 설명들 중 다음 구문을 찾을 수 있다.
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
해당 경로들을 순차적으로 접근하여 먼저 찾는 파일을 컴파일 하는데 사용한다.
시스템 변수란 설정 파일의 내용을 읽어 메모리나 작동 방식을 초기화하고 접속된 사용자를 제어하기 위해 별도로 저장된 값을 말한다.
시스템 변수는 MySQL 서버에 접속해 SHOW VARIABLES 또는 SHOW GLOBAL VARIABLES 명령어를 통해 확인 할 수 있다.
전체 시스템 변수는 다음 MySQL에서 제공하는 메뉴얼에서 확인 할 수 있다.
https://dev.mysql.com/doc/refman/8.0/en/server-system-variable-reference.html
글로벌 변수
하나의 MySQL 서버 인스턴스에서 전체적으로 영향을 미치는 변수를 의미하며 서버 자체에 관련된 설정일 경우가 많다. 대표적인 예로 InnoDB 버퍼 풀 크기, MyISAM의 키 캐시 크기등이 있다.
세션 변수
클라이언트가 서버에 접속할 때 기본으로 부여한느 옵션의 기본 값을 제어하는데 사용되는 변수를 의미한다.
여기서 중요한 점은 기본 값이라는 것이다. 클라이언트의 필요에 따라 개별 커넥션 단위로 다른 값으로 변경할 수 있는 것이 세션 변수다.
공식 메뉴얼에 시스템 변수를 보면 세션 변수중 MySQL 서버의 설정 파일에 기본 값을 정해놓고 사용할 수 있는 경우에 스코프는 Both라고 한다.
이러한 경우 MySQL서버가 값을 기억만 하고 있다 커넥션이 생성되면 해당 값을 기본 값으로 사용하는 것이다.
따라서 순수 세션 스코프인 변수는 초깃값을 명시할 수 없으며 커넥션 생성 시 설정되는 변수이다.
정적 변수와 동적 변수는 서버가 기동 중인 상태에서 변경 가능한지에 따라 구분 할 수 있다.
MySQL에서 시스템 변수에 변경은 디스크에 저장돼 있는 설정 파일 변경과 기동 중인 MySQL 서버의 메모리에 있는 시스템 변수의 변경으로 구분할 수 있다.
설정 파일 변경은 기동중인 시스템에 바로 반영되지 않고 재시작을 해야만 반영할 수 있다.
메모리 변수 변경은 SET 명령어를 통해 변경이 가능하지만 설정 파일에 적용되지 않기에 재시작하면 설정 파일에 값이 적용된다.
메모리 변수 변경과 동시에 설정 파일도 변경하고 싶다면 SET PERSIST명령어를 사용하면 된다.
SET PERSIST
MySQL 시스템 변수 변경 시 영구히 적용하기 위한 방법이다.
현재 기동중인 서버에는 적용하지 않고 재시작시 적용하고 싶거나 정적 변수를 변경하고 싶다면SET PERSIST_ONLY명령어를 사용하면 된다.
변경한 내용을 취소하는 방법은 다음과 같다.
RESET PERSIST IF EXISTS 변수명또는 전체 삭제는RESET PERSIST이다.
글로벌, 세션 변수의 조회 및 변경
명령어 뒤에 GLOBAL 키워드에 존재 여부에 따라 구분가능하다.
SHOW GLOBAL VARIABLES LIKE 'join_buffer_size'
SHOW VARIABLES LIKE 'join_buffer_size'
마지막으로 시스템 변수는 잘 알고 사용하면 유용한 도구가 되지만 특정 서버의 하드웨어, 서비스의 따라 오히려 성능을 떨어지게 할 수 있음을 명심하며 사용하자.