Loading...
MySQL 9.5 Reference Manual 9.5의 7.1.9 Using System Variables의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
7.1.9.1 System Variable Privileges
7.1.9.2 Dynamic System Variables
7.1.9.3 Persisted System Variables
7.1.9.4 Nonpersistible and Persist-Restricted System Variables
7.1.9.5 Structured System Variables
MySQL server는 동작을 구성하는 많은 시스템 변수를 유지합니다. Section 7.1.8, “Server System Variables”에서는 이러한 변수의 의미를 설명합니다. 각 시스템 변수는 기본값을 가집니다. 시스템 변수는 server 시작 시 커맨드 라인 또는 옵션 파일의 옵션을 사용하여 설정할 수 있습니다. 대부분은 server가 실행 중인 동안 SET 문을 통해 동적으로 변경할 수 있으며, 이를 통해 server를 중지하고 재시작하지 않고도 server 동작을 수정할 수 있습니다. 또한 표현식에서 시스템 변수 값을 사용할 수도 있습니다.
많은 시스템 변수는 내장되어 있습니다. 시스템 변수는 server 플러그인 또는 컴포넌트에 의해 설치될 수도 있습니다:
Server 플러그인에 의해 구현된 시스템 변수는 플러그인이 설치될 때 노출되며 이름이 플러그인 이름으로 시작합니다. 예를 들어 audit_log 플러그인은 audit_log_policy라는 시스템 변수를 구현합니다.
컴포넌트에 의해 구현된 시스템 변수는 컴포넌트가 설치될 때 노출되며 컴포넌트 고유의 프리픽스로 시작하는 이름을 가집니다. 예를 들어 log_filter_dragnet 에러 로그 필터 컴포넌트는 log_error_filter_rules라는 시스템 변수를 구현하며, 전체 이름은 dragnet.log_error_filter_rules입니다. 이 변수를 참조할 때는 전체 이름을 사용하십시오.
시스템 변수가 존재하는 스코프에는 두 가지가 있습니다. 글로벌 변수는 server 전체 동작에 영향을 미칩니다. 세션 변수는 개별 클라이언트 커넥션의 동작에 영향을 미칩니다. 특정 시스템 변수는 글로벌 값과 세션 값을 모두 가질 수 있습니다. 글로벌 시스템 변수와 세션 시스템 변수의 관계는 다음과 같습니다:
Server가 시작될 때 각 글로벌 변수를 그 기본값으로 초기화합니다. 이러한 기본값은 커맨드 라인 또는 옵션 파일에서 지정된 옵션으로 변경할 수 있습니다. (자세한 내용은 Section 6.2.2, “Specifying Program Options” 참조.)
Server는 또한 연결하는 각 클라이언트에 대해 세션 변수 집합을 유지합니다. 클라이언트의 세션 변수는 연결 시점에 해당 글로벌 변수의 현재 값을 사용하여 초기화됩니다. 예를 들어, 클라이언트의 SQL 모드는 세션 sql_mode 값에 의해 제어되며, 이는 클라이언트가 연결할 때 글로벌 sql_mode 값으로 초기화됩니다.
일부 시스템 변수의 경우 세션 값은 해당 글로벌 값에서 초기화되지 않습니다. 그런 경우 변수 설명에 그 사실이 표시됩니다.
시스템 변수 값은 server 시작 시 커맨드 라인 또는 옵션 파일의 옵션을 사용하여 글로벌하게 설정할 수 있습니다. 시작 시 시스템 변수에 대한 구문은 커맨드 옵션과 동일하므로 변수 이름 내에서는 대시와 언더스코어를 서로 바꾸어 사용할 수 있습니다. 예를 들어, --general_log=ON과 --general-log=ON은 동일합니다.
숫자 값을 취하는 변수를 시작 옵션으로 설정할 때, 값 뒤에 K, M, G, T, P, E (대소문자 모두 허용) 서픽스를 붙여 1024, 1024², 1024³, 1024⁴, 1024⁵, 1024⁶의 배수를 나타낼 수 있습니다. 즉 각각 킬로바이트, 메가바이트, 기가바이트, 테라바이트, 페타바이트, 엑사바이트 단위입니다. 따라서 다음 커맨드는 정렬 버퍼 크기를 256킬로바이트로, 최대 패킷 크기를 1기가바이트로 설정하여 server를 시작합니다:
1mysqld --sort-buffer-size=256K --max-allowed-packet=1G
옵션 파일 내에서 이러한 변수는 다음과 같이 설정합니다:
1[mysqld] 2sort_buffer_size=256K 3max_allowed_packet=1G
서픽스 문자에 대한 대소문자는 중요하지 않습니다. 256K와 256k는 동일하며, 1G와 1g도 마찬가지입니다.
SET 문으로 런타임에 시스템 변수가 설정될 수 있는 최대값을 제한하려면, server 시작 시 --maximum-var_name=value 형식의 옵션을 사용하여 이 최대값을 지정하십시오. 예를 들어, 런타임에 sort_buffer_size 값이 32MB를 초과하여 증가되지 않도록 막으려면 --maximum-sort-buffer-size=32M 옵션을 사용합니다.
많은 시스템 변수는 동적이며 SET 문을 사용해 런타임에 변경할 수 있습니다. 목록은 Section 7.1.9.2, “Dynamic System Variables”를 참조하십시오. SET으로 시스템 변수를 변경할 때는, 이름을 필요에 따라 수정자를 앞에 붙여 참조합니다. 런타임에는 시스템 변수 이름을 대시가 아닌 언더스코어를 사용하여 작성해야 합니다. 다음 예제는 이 구문을 간단히 보여 줍니다:
1SET GLOBAL max_connections = 1000; 2SET @@GLOBAL.max_connections = 1000;
mysqld-auto.cnf 파일에 퍼시스트(및 런타임 값 설정):1SET PERSIST max_connections = 1000; 2SET @@PERSIST.max_connections = 1000;
mysqld-auto.cnf 파일에 퍼시스트(단, 런타임 값은 설정하지 않음):1SET PERSIST_ONLY back_log = 1000; 2SET @@PERSIST_ONLY.back_log = 1000;
1SET SESSION sql_mode = 'TRADITIONAL'; 2SET @@SESSION.sql_mode = 'TRADITIONAL'; 3SET @@sql_mode = 'TRADITIONAL';
SET 구문에 대한 전체 세부 내용은 Section 15.7.6.1, “SET Syntax for Variable Assignment”를 참조하십시오. 시스템 변수를 설정하고 퍼시스트하는 데 필요한 권한 설명은 Section 7.1.9.1, “System Variable Privileges”를 참조하십시오.
값 배수를 지정하는 서픽스는 server 시작 시 변수를 설정할 때 사용할 수 있지만, 런타임에 SET으로 값을 설정할 때는 사용할 수 없습니다. 반면, SET을 사용하면 시작 시 변수를 설정할 때는 할 수 없는 표현식을 사용하여 변수 값을 할당할 수 있습니다. 예를 들어, 다음 줄 중 첫 번째는 server 시작 시에는 허용되지만, 두 번째는 허용되지 않습니다:
1$> mysql --max_allowed_packet=16M 2$> mysql --max_allowed_packet=16*1024*1024
반대로, 다음 줄 중 두 번째는 런타임에는 허용되지만, 첫 번째는 허용되지 않습니다:
1mysql> SET GLOBAL max_allowed_packet=16M; 2mysql> SET GLOBAL max_allowed_packet=16*1024*1024;
시스템 변수 이름과 값을 표시하려면 SHOW VARIABLES 문을 사용합니다:
1mysql> SHOW VARIABLES; 2+-------------------------------------------------------+----------------------+ 3| Variable_name | Value | 4+-------------------------------------------------------+----------------------+ 5| activate_all_roles_on_login | OFF | 6| admin_address | | 7| admin_port | 33062 | 8| admin_ssl_ca | | 9| admin_ssl_capath | | 10| admin_ssl_cert | | 11| admin_ssl_cipher | | 12| admin_ssl_crl | | 13| admin_ssl_crlpath | | 14| admin_ssl_key | | 15| admin_tls_ciphersuites | | 16| admin_tls_version | TLSv1.2,TLSv1.3 | 17| authentication_policy | *,, | 18| auto_generate_certs | ON | 19| auto_increment_increment | 1 | 20| auto_increment_offset | 1 | 21| autocommit | ON | 22| automatic_sp_privileges | ON | 23 24... 25 26| version | 8.4.0 | 27| version_comment | Source distribution | 28| version_compile_machine | x86_64 | 29| version_compile_os | Linux | 30| version_compile_zlib | 1.2.13 | 31| wait_timeout | 28800 | 32| warning_count | 0 | 33| windowing_use_high_precision | ON | 34| xa_detach_on_prepare | ON | 35+-------------------------------------------------------+----------------------+
LIKE 절을 사용하면, 해당 문은 패턴과 일치하는 변수만 표시합니다. 특정 변수 이름을 얻으려면 다음과 같이 LIKE 절을 사용합니다:
1SHOW VARIABLES LIKE 'max_join_size'; 2SHOW SESSION VARIABLES LIKE 'max_join_size';
이름이 특정 패턴과 일치하는 변수 목록을 얻으려면 LIKE 절에서 % 와일드카드 문자를 사용합니다:
1SHOW VARIABLES LIKE '%size%'; 2SHOW GLOBAL VARIABLES LIKE '%size%';
와일드카드 문자는 일치시킬 패턴 내의 어느 위치에서나 사용할 수 있습니다. 엄밀히 말하면 _ 는 임의의 단일 문자를 일치시키는 와일드카드이므로, 문자 그대로 _ 를 일치시키려면 \_ 로 이스케이프해야 합니다. 실제로는 이런 처리가 필요한 경우는 드뭅니다.
SHOW VARIABLES에서 GLOBAL도 SESSION도 지정하지 않으면, MySQL은 SESSION 값을 반환합니다.
GLOBAL 전용 변수를 설정할 때는 GLOBAL 키워드를 요구하면서도, 조회할 때는 요구하지 않는 이유는 향후 문제를 방지하기 위해서입니다:
동일한 이름을 가진 GLOBAL 변수가 존재하는 상황에서 SESSION 변수가 제거된다면, 글로벌 변수를 수정할 수 있는 충분한 권한을 가진 클라이언트가 자신의 세션에 대해서만 SESSION 변수를 변경하려다 GLOBAL 변수를 실수로 변경할 수 있습니다.
동일한 이름을 가진 GLOBAL 변수가 존재하는 상황에서 SESSION 변수가 추가된다면, GLOBAL 변수를 변경하려던 클라이언트가 실제로는 자신의 SESSION 변수만 변경하게 될 수 있습니다.
7.1.8 Server System Variables
7.1.10 Server Status Variables