하나의 MySql 서버 인스턴스에서 전체적으로 영향을 미치는 시스템 변수(ex. innodb_buffer_pool 등)
세션 변수
MySql 클라이언트가 MySql 서버에 접속할 때 기본으로 부여하는 옵션 값을 제어하는 데 사용(ex. autoCommit 등)
한번 연결된 커넥션의 세션 변수는 서버에서 강제 변경이 불가능
Both 변수
MySql 서버 설정 파일에 명시해 초기화 할 수 있는 변수
정적 변수와 동적 변수
개념
비고
Query
정적 변수
디스크에 설정되어 있는 설정파일(my.cnf, my.ini)의 변수
디스크에 설정된 파일 내용은 MySql 을 재시작하기 전에는 적용되질 않는다.
show global variables;(설정 파일 내용 보기) set global xxx=xxx(설정 파일 적용)
동적 변수
이미 기동 중인 MySql 서버 메모리에 있는 시스템 변수
set 명령으로 변경하여도 내용이 자동으로 my.cnf 파일에 적용 안됨(set persist 명령으로 저장해야함)
참고 시스템 변수의 범위가 Both인 경우 글로벌 시스템 변수의 값을 변경해도 이미 존재하는 커넥션의 세션 변숫값은 변경되지 않고 유지된다. 1. SHOW global variables like 'join_buffer_size'; / SHOW variables like 'join_buffer_size';
2. set global join_buffer_size = 524288(Both 변수 값 변경) 3. SHOW global variables like 'join_buffer_size'; / SHOW variables like 'join_buffer_size'
세션 변수 값은 변경 안되는 것을 확인할 수 있다.
Set Persist
MySql에서 동적 변수 같은 경우 MySQL서버에서 Set Global 명령으로 변경하면 즉시 변경되지만, 실제 설정 파일에서는 해당 내용이 적용이 안되어 있다. MySQL 서버를 재실행하면, 다시 예전의 시스템 변수 값으로 서버가 시작되고, 장애가 발생하는 경우가 빈번하다. 이를 보완하기 위해 Set Persist 명령이 도입되었다.
Set Persist(설정 영속화)
set persist max_connections = 5000; -- mysqld-auto.cnf 파일에 같이 설정
show global variables like 'max_connections'; -- 설정 보기
set persist_only max_connections = 5000; -- mysqld-auto.cnf 파일에만 설정(현재 설정 X)
reset persist max_connections -- 특정 시스템 변수만
reset persist -- 모든 시스템 변수
해당 명령으로 시스템 변수를 변경하면 MySQL 서버는 변경되 값을 즉시 적용함과 동시에 별도의 설정 파일(mysqld-auto.cnf)에 변경 내용을 추가로 기록된다.
그 후 서버를 재시작할 때 기본 설정 파일뿐만 아니라 자동 생성된 파일(mysqld-auto.cnf)도 같이 참조해 시스템 변수를 적용한다.
Set Persist 명령은 세션 변수에는 적용되지 않으며 Set Persist 명령으로 시스템 변수를 변경 시 MySql 서버는 자동으로 Global 시스템 변수의 변경으로 인식하고 변경한다
만약 현재 실행중인 서버에 변경을 적용하지 않고 다음 재시작 때만 적용하고 싶다면 Set Persist_only 명령을 사용하면 된다.(정적 변수의 값을 변경할 때 주로 사용한다)
Set Persist, Set Persist_only로 추가된 시스템 변수의 내용을 삭제해야 할 경우에는 mysqld-auto.cnf 파일의 내용을 직접 변경하지 말고, Reset persist 명령어를 이용하면 된다.
Reset Persist xxx (특정 시스템 변수만 삭제)
Reset Persist(mysqld-auto.cnf 모든 시스템 변수 삭제)
my.cnf 파일
MySql 8.0 서버 시스템 변수는 약 570개 수준이며 플러그인, 컴포넌트에 따라 늘어날 수 있다.