MySQL 시스템변수

문한성·2023년 3월 17일
0

MySQL

목록 보기
2/5
post-thumbnail

글로벌 변수와 세션 변수

글로벌 변수

  • 글로벌 범위의 시스템 변수는 MySQL 서버 인스턴스에서 전체적으로 형향을 미치는 시스템 변수
  • MySQL서버에서 단 하나만 존재하는 InnoDB 버퍼 풀 크기 또는 MylSAM의 캐시 크기 등이 대표적인 글로벌 변수

세션 변수

  • 세션 범위의 시스템 변수는 MySQL 클라이언트가 MySQL 서버에 접속할 때 기본으로 부여하는 옵션의 기본값을 제어
  • 별도로 그 값을 변경하지 않은 경우에는 그대로 값이 유지되지만, 클라이언트의 필요에 따라 개별 커넥션 단위로 다른값으로 변경 될 수 있다. 여기서 기본값은 글로벌 시스템 변수이며, 각 클라이언트가 가지고 있는 값이 세션 시스템 변수이다.
  • 각 클라이언트에서 쿼리 단위로 자동 커밋을 수행할지 여부를 결정하는 autocommit 변수가 대표적인 예시이다.
  • MySQL. 서버 설정파일(my.cnf 또는 mt.ini)에 명시해 초기화할 수 있는 변수는 배부분 범위가 ‘Both’라고 명시되있다.
    이렇게 ‘Both’로 명시된 시스템 변수는 MySQL 서버가 기억만 하고 있다가 실제 클라이언트와의 커넥션이 생성되는 순간에 해당 커넥션의 기본값으로 사용된다.

정적 변수와 동적 변수

MySQL 서버의 시스템 변수는 MySQL 서버가 기동중인 상태에서 변경 가능한지에 따라 동적 변수와 정적 변수로 구분된다.

MySQL에서 정적 변수와 동적 변수는 둘 다 서버 변수(server variables)라고도 불리며, MySQL 서버의 동작을 제어하는 데 사용됩니다. 그러나 그들은 서로 다른 특성을 가지고 있습니다.

정적 변수(Static variables)는 MySQL 서버가 시작될 때 설정되고, 서버가 종료될 때까지 유지됩니다. 이러한 변수는 my.cnf 파일에서 설정할 수 있으며, 이 파일은 MySQL 서버의 구성 파일입니다. 예를 들어, max_connections 변수는 서버에 연결할 수 있는 최대 클라이언트 연결 수를 제한합니다. 이 값을 변경하려면 my.cnf 파일에서 max_connections=100과 같이 값을 수정하면 됩니다.

동적 변수(Dynamic variables)는 MySQL 서버가 실행 중일 때 설정되며, 변경할 수 있습니다. 이러한 변수는 SET 명령을 사용하여 설정할 수 있습니다. 예를 들어, sort_buffer_size 변수는 MySQL 서버가 실행되는 동안 정렬 작업에 사용되는 버퍼의 크기를 제어합니다. 이 값을 변경하려면 SET sort_buffer_size=256M과 같이 명령을 실행하면 됩니다.
시스템 변수의 범위가 ‘Both’인 경우(글로벌이면서 세션 변수인)에는 글로벌 시스템 변수의 값을 변경해도 이미 존재하는 커넥션의 세션 변숫값은 변경되지 않고 그대로 유지된다.

따라서, 정적 변수와 동적 변수는 MySQL 서버의 동작을 제어하는 데 사용되는 두 가지 서버 변수입니다. 그러나 정적 변수는 서버가 시작될 때 설정되고, 서버가 종료될 때까지 유지되는 반면, 동적 변수는 MySQL 서버가 실행 중일 때 설정되며 변경할 수 있습니다.

SET PERSIST

MySQL SET PERSIST 명령은 시스템을 다시 시작한 후에도 지속되도록 시스템 변수 또는 구성 파일의 옵션 값을 저장하는 데 사용됩니다. 이는 MySQL 서버가 중지되었다가 다시 시작되더라도 SET PERSIST를 사용하여 설정된 값이 세션 간에 유지됨을 의미합니다.

예를 들어 SET PERSIST max_connections = 100 명령을 사용하면 max_connections 값이 100으로 설정되고 이 값은 서버 재시작 후에도 유지되도록 구성 파일에 저장됩니다. 이는 서버를 다시 시작할 때마다 설정하지 않고 특정 옵션이나 시스템 변수를 영구적으로 구성하려는 상황에서 유용할 수 있습니다.

SET PERSIST 명령은 현재 세션에만 영향을 미치고 이 명령을 사용하여 설정한 값은 다른 세션이나 MySQL 서버에 대한 연결에 영향을 미치지 않는다는 점에 유의해야 합니다. 또한 일부 시스템 변수 및 옵션은 SET PERSIST를 사용하여 설정하지 못할 수 있으므로 MySQL 설명서를 참조하여 특정 옵션을 이러한 방식으로 구성할 수 있는지 확인하는 것이 중요합니다.

다음은 몇 가지 사용 예와 그 결과입니다.

예 1 - SET PERSIST를 사용하여 max_connections 시스템 변수 설정:
SET PERSIST max_connections = 200;
이렇게 하면 max_connections 시스템 변수가 200으로 설정되고 이 값이 구성 파일에 저장되어 시스템을 다시 시작한 후에도 지속됩니다. MySQL 서버에 대한 모든 새 연결은 최대 200개의 동시 연결로 제한됩니다.

예 2 - SET PERSIST를 사용하여 느린 쿼리 로그 활성화
SET PERSIST slow_query_log = 1;
그러면 MySQL에서 느린 쿼리 로그가 활성화되고 이 구성이 구성 파일에 저장되어 시스템을 다시 시작한 후에도 지속됩니다. 구성된 실행 시간보다 오래 걸리는 쿼리는 느린 쿼리 로그에 기록됩니다.

예시 3 - SET PERSIST를 사용하여 바이너리 로깅 비활성화:
SET PERSIST log_bin = 0;
이렇게 하면 MySQL에서 이진 로깅이 비활성화되고 이 구성이 구성 파일에 저장되어 시스템을 다시 시작한 후에도 지속됩니다. 바이너리 로깅은 데이터베이스에 대한 변경 사항을 기록하는 데 사용되지만 비활성화하면 경우에 따라 디스크 사용량을 줄이고 성능을 향상시킬 수 있습니다.

이 모든 예에서 SET PERSIST 명령은 시스템 변수 또는 옵션을 설정하고 구성 파일에 저장하여 시스템을 다시 시작한 후에도 지속되도록 하는 데 사용됩니다. 이는 세션 간에 유지되어야 하는 특정 방식으로 MySQL을 구성하려는 상황에서 유용할 수 있습니다.

SET PERSIST_ONLY

'SET PERSIST_ONLY' 명령은 시스템 변수 또는 옵션의 값을 구성 파일에 저장하여 시스템을 다시 시작한 후에도 지속되도록 한다는 점에서 'SET PERSIST' 명령과 유사합니다. 그러나 두 명령 사이에는 한 가지 중요한 차이점이 있습니다.

SET PERSIST 명령을 사용하면 시스템 변수 또는 옵션의 값이 현재 세션에 설정되고 구성 파일에 저장됩니다. 이는 새 값이 현재 세션뿐 아니라 나중에 시작될 수 있는 모든 후속 세션에 적용됨을 의미합니다.

반면 'SET PERSIST_ONLY' 명령을 사용하면 시스템 변수나 옵션의 값이 설정 파일에만 저장된다. 현재 세션은 영향을 받지 않으며 새 값은 MySQL 서버를 다시 시작할 때만 적용됩니다.

차이점을 설명하는 데 도움이 되는 예는 다음과 같습니다.

SET PERSIST max_connections = 100; SET PERSIST_ONLY slow_query_log = 1;
이 예에서 첫 번째 명령은 max_connections 변수를 100으로 설정하고 SET PERSIST를 사용하여 구성 파일에 저장합니다. 두 번째 명령은 SET PERSIST_ONLY를 사용하여 slow_query_log 변수를 1로 설정하지만 현재 세션에만 적용됩니다. MySQL 서버가 다시 시작되면 max_connections 값은 100으로 설정되고 slow_query_log 값은 0(또는 기본값)으로 설정됩니다. SET PERSIST_ONLY 명령은 구성 파일에 영향을 미치지 않기 때문입니다. .

요약하면 'SET PERSIST_ONLY' 명령을 사용하면 현재 세션에 영향을 주지 않고 구성 파일의 시스템 변수 또는 옵션 값을 저장할 수 있는 반면, 'SET PERSIST' 명령은 현재 세션에 대한 값을 설정하고 저장합니다. 구성 파일에서.

my.cnf

my.cnf 파일은 서버의 동작을 제어하는 설정 및 옵션을 저장하기 위해 MySQL 데이터베이스 서버에서 사용하는 구성 파일입니다. 텍스트 편집기를 사용하여 편집할 수 있는 일반 텍스트 파일입니다.

my.cnf 파일은 일반적으로 MySQL 설치 디렉터리에 있으며 다양한 구성 옵션을 포함할 수 있습니다. 다음은 파일에 포함될 수 있는 가장 일반적인 옵션 중 일부입니다.

  • [mysqld] 섹션 - MySQL 서버 전체에 적용되는 옵션을 설정하는 섹션입니다. 이 섹션에서 설정할 수 있는 몇 가지 일반적인 옵션에는 port, max_connections, log_error 및 datadir이 포함됩니다.
  • [mysql] 섹션 - 이 섹션은 MySQL 명령줄 클라이언트에 적용되는 옵션을 설정하는 데 사용됩니다. 이 섹션에서 설정할 수 있는 몇 가지 일반적인 옵션에는 host, user, password 및 database가 있습니다.
  • [client] 섹션 - 이 섹션은 명령줄 클라이언트 및 그래픽 사용자 인터페이스 도구를 포함하여 모든 MySQL 클라이언트 프로그램에 적용되는 옵션을 설정하는 데 사용됩니다. 이 섹션에서 설정할 수 있는 몇 가지 일반적인 옵션에는 port, socket, user 및 password가 있습니다.
  • [mysqldump] 섹션 - 이 섹션은 MySQL 데이터베이스의 백업을 생성하는 데 사용되는 mysqldump 명령줄 유틸리티의 동작을 제어하는 옵션을 설정하는 데 사용됩니다. 이 섹션에서 설정할 수 있는 몇 가지 일반적인 옵션에는 user, password 및 lock-tables가 있습니다.

my.cnf 파일은 시작할 때 MySQL 서버에서 읽으므로 서버를 다시 시작할 때까지 파일에 대한 변경 사항이 적용되지 않는다는 점에 유의하는 것이 중요합니다. 또한 일부 옵션은 my.cnf 파일에서 설정할 수 없으며 MySQL 명령줄 클라이언트에서 SET 명령을 사용하여 설정해야 할 수 있습니다.

전반적으로 'my.cnf' 파일은 MySQL 데이터베이스 서버의 동작을 구성하고 사용자 지정하는 데 중요한 도구이며 특정 애플리케이션이나 사용 사례의 요구 사항을 충족하도록 서버를 미세 조정하는 데 사용할 수 있습니다.

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글