Loading...
MySQL 9.5 Reference Manual 9.5의 7.4.1 Selecting General Query Log and Slow Query Log Output Destinations의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
MySQL Server는 general query log와 slow query log가 활성화된 경우, 이들 로그에 기록되는 출력의 목적지를 유연하게 제어할 수 있도록 합니다. 로그 항목의 가능한 목적지는 로그 파일 또는 mysql 시스템 데이터베이스에 있는 general_log 및 slow_log 테이블입니다. 파일 출력, 테이블 출력, 또는 둘 다를 선택할 수 있습니다.
log_output 시스템 변수는 로그 출력의 목적지를 지정합니다. 이 변수를 설정하는 것만으로는 로그가 활성화되지 않으며, 로그는 별도로 활성화해야 합니다.
시작 시 log_output이 지정되지 않으면 기본 로깅 목적지는 FILE입니다.
시작 시 log_output이 지정되면, 그 값은 TABLE(테이블로 로그), FILE(파일로 로그), NONE(테이블과 파일 모두에 로그하지 않음) 중에서 선택한 하나 이상의 단어를 콤마로 구분한 목록입니다. NONE이 존재하는 경우, 다른 지정자보다 우선합니다.
general_log 시스템 변수는 선택된 로그 목적지에 대해 general query log로 로깅할지를 제어합니다. 서버 시작 시 지정되는 경우, general_log은 로그를 활성화하거나 비활성화하기 위해 선택적인 인자 1 또는 0을 취합니다. 파일 로깅에 대해 기본값이 아닌 다른 파일 이름을 지정하려면 general_log_file 변수를 설정합니다.
마찬가지로, slow_query_log 변수는 선택된 목적지에 대해 slow query log로 로깅을 제어하며, slow_query_log_file을 설정하면 파일 로깅용 파일 이름을 지정합니다. 두 로그 중 하나라도 활성화되면, 서버는 해당 로그 파일을 열고 시작 메시지를 그곳에 기록합니다. 그러나 FILE 로그 목적지가 선택되지 않은 한, 쿼리를 파일에 추가로 로깅하는 것은 발생하지 않습니다.
예제:
general query log 항목을 로그 테이블과 로그 파일 모두에 기록하려면, --log_output=TABLE,FILE을 사용하여 두 로그 목적지를 모두 선택하고, --general_log을 사용하여 general query log를 활성화합니다.
general 및 slow query log 항목을 로그 테이블에만 기록하려면, --log_output=TABLE을 사용하여 테이블을 로그 목적지로 선택하고, --general_log과 --slow_query_log을 사용하여 두 로그를 모두 활성화합니다.
slow query log 항목을 로그 파일에만 기록하려면, --log_output=FILE을 사용하여 파일을 로그 목적지로 선택하고, --slow_query_log을 사용하여 slow query log를 활성화합니다. 이 경우, 기본 로그 목적지가 FILE이므로 log_output 설정을 생략할 수 있습니다.
로그 테이블 및 파일과 관련된 시스템 변수를 사용하면 런타임에 로깅을 제어할 수 있습니다:
log_output 변수는 현재 로깅 목적지를 나타냅니다. 런타임에 이 변수를 수정하여 목적지를 변경할 수 있습니다.
general_log 및 slow_query_log 변수는 general query log와 slow query log가 활성화(ON)되어 있는지 또는 비활성화(OFF)되어 있는지를 나타냅니다. 이 변수들을 런타임에 설정하여 로그 활성화 여부를 제어할 수 있습니다.
general_log_file 및 slow_query_log_file 변수는 general query log 및 slow query log 파일의 이름을 나타냅니다. 서버 시작 시 또는 런타임에 이 변수들을 설정하여 로그 파일의 이름을 변경할 수 있습니다.
현재 세션에 대해 general query 로깅을 비활성화하거나 활성화하려면, 세션 sql_log_off 변수를 ON 또는 OFF로 설정합니다. (이는 general query log 자체가 활성화되어 있다고 가정합니다.)
로그 출력에 테이블을 사용하는 것은 다음과 같은 이점을 제공합니다:
1SHOW CREATE TABLE mysql.general_log; 2SHOW CREATE TABLE mysql.slow_log;
로그 내용은 SQL 구문을 통해 접근할 수 있습니다. 이를 통해 특정 기준을 만족하는 로그 항목만 선택하는 쿼리를 사용할 수 있습니다. 예를 들어, 특정 클라이언트와 연관된 로그 내용을 선택하는 것은 (해당 클라이언트로부터 오는 문제가 있는 쿼리를 식별하는 데 유용할 수 있음) 로그 파일보다 로그 테이블을 사용하는 것이 더 쉽습니다.
로그 테이블은 서버에 연결하여 쿼리를 실행할 수 있는 어떤 클라이언트를 통해서도 원격으로 접근할 수 있습니다 (클라이언트가 적절한 로그 테이블 권한을 가진 경우). 서버 호스트에 로그인하여 파일 시스템에 직접 접근할 필요가 없습니다.
로그 테이블 구현에는 다음과 같은 특성이 있습니다:
일반적으로, 로그 테이블의 주요 목적은 서버의 런타임 실행에 간섭하지 않고 사용자가 런타임 실행을 관찰할 수 있는 인터페이스를 제공하는 것입니다.
CREATE TABLE, ALTER TABLE, 및 DROP TABLE은 로그 테이블에 대해 유효한 연산입니다. ALTER TABLE 및 DROP TABLE의 경우, 로그 테이블이 사용 중이면 안 되며, 나중에 설명하는 대로 비활성화되어야 합니다.
기본적으로, 로그 테이블은 콤마로 구분된 값 형식으로 데이터를 기록하는 CSV 스토리지 엔진을 사용합니다. 로그 테이블 데이터가 포함된 .CSV 파일에 접근할 수 있는 사용자의 경우, 이 파일은 CSV 입력을 처리할 수 있는 스프레드시트와 같은 다른 프로그램으로 쉽게 가져올 수 있습니다.
로그 테이블은 MyISAM 스토리지 엔진을 사용하도록 변경될 수 있습니다. 사용 중인 로그 테이블에는 ALTER TABLE을 사용할 수 없습니다. 먼저 로그를 비활성화해야 합니다. CSV 또는 MyISAM 이외의 엔진은 로그 테이블에 사용할 수 없습니다.
Log Table과 “Too many open files” Error.
TABLE을 로그 목적지로 선택하고 로그 테이블이 CSV 스토리지 엔진을 사용하는 경우, 런타임에 general query log 또는 slow query log를 반복해서 비활성화하고 활성화하면 .CSV 파일에 대한 열린 파일 디스크립터 수가 증가하여, “Too many open files” 오류가 발생할 수 있습니다. 이 문제를 해결하려면 FLUSH TABLES를 실행하거나, open_files_limit의 값이 table_open_cache_instances의 값보다 크도록 해야 합니다.
slow_log 테이블과 slow_query_log 시스템 변수를 사용합니다.1SET @old_log_state = @@GLOBAL.general_log; 2SET GLOBAL general_log = 'OFF'; 3ALTER TABLE mysql.general_log ENGINE = MyISAM; 4SET GLOBAL general_log = @old_log_state;
TRUNCATE TABLE은 로그 테이블에 대해 유효한 연산입니다. 이 명령은 로그 항목을 만료시키는 데 사용할 수 있습니다.
RENAME TABLE은 로그 테이블에 대해 유효한 연산입니다. 다음 전략을 사용하여 로그 테이블을 원자적으로 이름 변경할 수 있습니다 (예를 들어 로그 로테이션을 수행하기 위해):
1USE mysql; 2DROP TABLE IF EXISTS general_log2; 3CREATE TABLE general_log2 LIKE general_log; 4RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;
CHECK TABLE은 로그 테이블에 대해 유효한 연산입니다.
LOCK TABLES는 로그 테이블에 대해 사용할 수 없습니다.
INSERT, DELETE, 및 UPDATE는 로그 테이블에 대해 사용할 수 없습니다. 이러한 연산은 서버 자체 내부에서만 허용됩니다.
FLUSH TABLES WITH READ LOCK 및 read_only 시스템 변수의 상태는 로그 테이블에 아무런 영향을 주지 않습니다. 서버는 항상 로그 테이블에 쓰기할 수 있습니다.
로그 테이블에 기록된 항목은 바이너리 로그에 기록되지 않으므로 레플리카로 복제되지 않습니다.
로그 테이블 또는 로그 파일을 플러시하려면 각각 FLUSH TABLES 또는 FLUSH LOGS를 사용합니다.
로그 테이블의 파티셔닝은 허용되지 않습니다.
mysqldump 덤프에는 덤프 파일을 다시 로드한 후 해당 테이블이 누락되지 않도록 이 테이블들을 재생성하는 구문이 포함됩니다. 로그 테이블 내용은 덤프되지 않습니다.
7.4 MySQL Server Logs
7.4.2 The Error Log