본문 바로가기

DataBase

[DataBase] MySQL 시스템 변수

728x90

MySQL 시스템 변수

MySQL 서버는 설정파일(my.ini or my.cnf)의 내용을 읽어 메모리나 작동방식을 초기화하고, 접속된 사용자를 제어하기 위해서 이런 값들을 별도로 저장해둡니다. 이러한 값들을 시스템 변수라고 부릅니다.

 

해당 값들은 다음과 같이 SHOW VARIABLES 또는 SHOW GLOBAL VARIABLES 라는 명령어로 확인할 수 있습니다.

 

 

글로벌 변수와 세션변수

일반적으로 시스템 변수가 가지는 속성 중 대표적으로 Var Scope 라는 옵션이 존재합니다.

이는 시스템 변수의 적용범위를 나타내는 것인데, 서버 전체에 영향을 미치는지 아니면 세션(MySQL 서버와 클라이언트 간의 커넥션)에만 적용되는것인지 구분합니다.

둘다 적용이 된다면 Both 라고 구분이 됩니다.

 

글로벌 변수는 전체적으로 영향을 미치는 시스템 변수를 의미하며, MySQL 서버 자체에 관련한 설정일 경우입니다.

예를 들면 MySQL 서버에 하나만 존재하는 InnoDB 버퍼 풀 크기, MyISAM의 키 캐시 크기등이 있습니다.

 

세션 변수는 MySQL 클라이언트가 MySQL 서버에 접속할 때, 기본으로 부여되는 옵션의 기본값을 제어하는데 사용됩니다. 따라서 개별 클라이언트 필요에 따라 다른 값으로 변경할 수 있는 것이 세션 변수입니다.

또한 한번 연결된 클라이언트의 세션 변수는 서버에서 강제로 변경할 수 없습니다.

 

글로벌 변수는 설정 파일(my.ini or my.cnf)에 명시해 초기화 할 수 있는 변수들이 대부분 글로벌 변수입니다.

이렇게 글로벌 변수로 명시된 시스템 변수는 MySQL 서버만 기억하고 있다가 클라이언트와 커넥션이 생성되는 순간 해당 커넥션에서 기본값으로 사용이됩니다. 

또한 앞서 이야기했던대로 범위가 Session 이라고 명시되어 있다면 MySQL 서버의 설정파일에서 초기값을 명시할 수 없습니다.

 

정적변수와 동적변수

MySQL 서버가 실행 중인 상태에서 변경가능한지의 여부에 따라 동적변수정적변수로 구분합니다.

상태를 변경하는 방법에는 디스크에 저장되있는 설정파일(my.ini or my.cnf)을 변경하는 방법과 이미 실행 중인 MySQL 서버의 메모리에 있는 시스템 변수를 변경하는방법으로 구분됩니다.

 

전자의 방법으로는 변경하더라도 MySQL 서버 재시작 전까지 적용되지 않습니다.

후자의 방법으로는 SET 명령어를 통해 값을 바꿀 수는 있지만 설정파일에는 적용되는 것이 아니기에 재시작하면 적용되지않습니다. 따라서 설정파일까지 적용하고 싶을 때 SET PERSIST 라는 명령을 통해 설정파일까지 기록할 수 있습니다.

 

SHOW나 SET 명령에서 GLOBAL 키워드를 사용하면 글로벌 시스템 변수의 목록을 다룰 수 있으며, GLOBAL 키워드가 없다면 자동으로 세션 변수를 다루는 것 입니다.

 

시스템 변수의 범위가 Both 인 경우에는 글로벌 변수의 값을 변경해도, 이미 존재하는 커넥션의 세션 변수값은 변경되지 않고 유지됩니다.

 

SET PERSIST

앞서 SET과는 다르게 실행되고 있는 인스턴스뿐만아니라 설정파일에도 적용을 할 수 있는 명령어라고 소개했습니다.

SET PERSIST 명령은 세션 변수 적용되지 않으며, 사용할 시 자동으로 글로벌 변수로 인식하고 변경합니다.

 

혹여 지금 실행중인 MySQL 서버에는 변경내용을 적용하지 않고, 재시작을 위해 mysqld-auto.cnf 파일에만 변경 내용을 기록하고 싶다면 SET PERSIST_ONLY 명령을 사용하면 됩니다.

또한 SET PERSIST 명령은 동적인 변수들의 값을 변경하는데 사용하는데, SET PERSIST_ONLY 명령은 mysqld-auto.cnf 파일에만 기록하는 것이기에 정적인 변수도 다룰 수 있습니다.

 

위와같이 SET PERSISTSET PERSIST_ONLY 명령을 사용하면 JSON 형식의 mysqld-auto.cnf 파일이 생성됩니다.

해당 파일에는 변경된 시스템 변수의 이름과 설정값, 언제 누구에의해 변경되었는지에 대한 정보도 기록됩니다.

 

변경된 시스템 변수의 메타 데이터는 performance_schema.variables_info 뷰와 performance_schema.persisted_variables 테이블을 통해 참조할 수 있습니다.

 

SET PERSIST  SET PERSIST_ONLY 명령을 사용해서 추가된 시스템 변수의 내용을 삭제해야 할 때가 있습니다. 이때 파일의 내용을 직접 수정하기 보다는 RESET PERSIST 명령을 통해 삭제하는 것이 안전합니다.

 


 

● 참고자료 : Real MySQL 8.0 (백은빈, 이성욱 | 위키북스)

728x90

'DataBase' 카테고리의 다른 글

[DataBase] DBCP  (0) 2024.04.11
[DataBase] DBMS 기본 용어  (0) 2023.08.02
[DataBase] MySQL vs Oracle  (0) 2023.07.28
[DataBase] 사용자  (0) 2023.07.19
[DataBase] Select 쿼리 실행순서  (0) 2023.07.06