5.2.1 일반 쿼리 로그와 슬로우 쿼리 로그 대상 선택
MySQL Server에서는 일반 쿼리 로그와 슬로우 쿼리 로그가 활성화되어있는 경우 이러한 로그에 출력을 유연하게 제어 할 수 있습니다. 로그 항목의 가능한 대상은 로그 파일 또는 mysql
데이터베이스의 general_log
및 slow_log
테이블입니다. 하나 또는 둘의 대상을 선택할 수 있습니다.
서버 시작시 로그 제어. --log-output
옵션은 로그 출력 대상을 지정합니다. 이 옵션 자체가 로그를 활성화하지 않습니다. 이 구문은 --log-output[=
입니다. value
,...]
--log-output
값이 지정되는 경우, 값은TABLE
(테이블에 기록),FILE
(파일에 기록), 또는NONE
(테이블에도 파일에 로그를 출력하지 않는다) 중 1 개 이상 단어의 쉼표로 구분 된 목록으로합니다.NONE
이있는 경우 다른 지정자보다 우선합니다.--log-output
이 생략 된 경우 기본 로깅 출력은FILE
입니다.
general_log
시스템 변수는 선택 된 로그 대상에 대한 일반 쿼리 로그에 로깅을 제어합니다. 서버 시작시 지정된 경우 general_log
로그를 활성화 또는 비활성화하는 옵션 인수 1 또는 0을 취합니다. 파일 로깅에 대한 기본 이외의 파일 이름을 지정하려면 general_log_file
변수를 설정합니다. 마찬가지로 slow_query_log
변수는 선택된 대상에 대한 슬로우 쿼리 로그에 로깅을 제어하고 slow_query_log_file
설정 파일 로깅을위한 파일 이름을 지정합니다. 하나의 로그가 활성화 된 경우, 서버는 해당 로그 파일을 열고 로그 파일에 부팅 메시지를 씁니다. 그러나 FILE
로그 대상이 선택되지 않는 한 파일에 대한 더 이상의 쿼리 로깅이 수행되지 않습니다.
예 :
일반 쿼리 로그 엔트리를 로그 테이블 및 로그 파일에 쓰려면
--log-output=TABLE,FILE
를 사용하여 두 로그 대상을 선택하고--general_log
를 사용하여 일반 쿼리 로그를 활성화 화합니다.일반 쿼리 로그 항목 및 슬로우 쿼리 로그 엔트리를 로그 테이블에만 쓰려면
--log-output=TABLE
을 사용하여 테이블을 로그 대상으로 선택하고--general_log
및--slow_query_log
를 사용하여 두 로그를 활성화합니다.슬로우 쿼리 로그 엔트리를 로그 파일에만 기록에는
--log-output=FILE
을 사용하여 파일을 로그 대상으로 선택하고--slow_query_log
을 사용하여 슬로우 쿼리 로그를 활성화합니다. (이 경우 기본 로그 출력은FILE
이기 때문에--log-output
옵션을 생략 할 수 있습니다.)
런타임 로그 제어. 로그 테이블 및 파일에 관련된 시스템 변수는 로깅에 대한 런타임 제어가 가능합니다.
글로벌
log_output
시스템 변수는 현재 로깅 출력을 나타냅니다. 출력 위치를 변경하기 위해이를 실행시 변경할 수 있습니다.글로벌
general_log
및slow_query_log
변수는 일반 쿼리 로그와 슬로우 쿼리 로그를 활성화 (ON
) 또는 비활성화 (OFF
) 여부를 지시합니다. 이러한 변수를 실행시에 설정하여 로그를 활성화할지 여부를 제어 할 수 있습니다.글로벌
general_log_file
및slow_query_log_file
변수는 일반 쿼리 로그 파일과 슬로우 쿼리 로그 파일의 이름을 지정합니다. 이러한 변수를 서버 시작시 또는 실행시에 설정하여 로그 파일의 이름을 변경 할 수 있습니다.현재 연결에 대한 일반 쿼리 로깅을 비활성화 또는 활성화하려면 세션
sql_log_off
변수를ON
또는OFF
로 설정합니다.
기록 용 테이블을 사용하는 것은 다음과 같은 장점이 있습니다.
로그 항목이 표준 형식을가집니다. 로그 테이블의 현재 구조를 표시하려면 다음 문을 사용합니다.
SHOW CREATE TABLE mysql.general_log; SHOW CREATE TABLE mysql.slow_log;
로그 내용에 SQL 문을 사용하여 액세스 할 수 있습니다. 따라서 특정 기준을 충족 로그 항목 만 선택하는 쿼리를 사용할 수 있습니다. 예를 들어, 특정 클라이언트에 연관된 로그 내용을 선택하려면 (클라이언트에서 문제가있는 쿼리를 식별하는 데 도움이 될 수 있습니다) 로그 파일보다 로그 테이블을 사용하여 수행 쉽습니다 .
서버에 연결하고 쿼리를 실행할 수있는 모든 클라이언트를 통해 로그에 원격으로 액세스 할 수 있습니다 (클라이언트가 적절한 로그 테이블 권한이있는 경우). 서버 호스트에 로그인하여 파일 시스템에 직접 액세스 할 필요가 없습니다.
로그 테이블의 구현에는 다음과 같은 특징이 있습니다.
일반적으로 로그 테이블의 주요 목적은 서버의 런타임 실행을 관찰하는 사용자 인터페이스를 제공하여 서버의 런타임 실행을 방해하지 않습니다.
CREATE TABLE
,ALTER TABLE
및DROP TABLE
로그 테이블에서 유효한 작업입니다.ALTER TABLE
및DROP TABLE
의 경우 로그 테이블은 사용 중이 안되어 나중에 설명하도록 해제해야합니다.기본적으로 로그 테이블은 쉼표로 구분 된 값 형식으로 데이터를 기록
CSV
스토리지 엔진을 사용합니다. 로그 테이블 데이터를 포함.CSV
파일에 액세스하는 사용자의 경우 CSV 입력을 처리 할 수있는 스프레드 시트와 같은 다른 프로그램에 파일을 쉽게 가져올 수 있습니다.로그 테이블은
MyISAM
스토리지 엔진을 사용하도록 변경 할 수 있습니다. 사용중인 로그 테이블을 변경하기 위해ALTER TABLE
을 사용할 수 없습니다. 로그를 먼저 해제해야합니다.CSV
또는MyISAM
을 제외한 모든 엔진은 로그 테이블에 대하여 적합하지 않습니다.로그 테이블을 변경 (또는 삭제) 할 수 있도록 로깅을 비활성화하려면 다음의 방법을 사용할 수 있습니다. 이 예제에서는 일반 쿼리 로그를 사용하고, 슬로우 쿼리 로그에 대한 절차도 비슷하지만
slow_log
테이블 및slow_query_log
시스템 변수를 사용합니다.SET @old_log_state = @@ global.general_log; SET GLOBAL general_log = 'OFF'; ALTER TABLE mysql.general_log ENGINE = MyISAM; SET GLOBAL general_log = @old_log_state;
TRUNCATE TABLE
은 로그 테이블에서 유효한 작업입니다. 로그 항목을 만료하는 데 사용할 수 있습니다.RENAME TABLE
로그 테이블에서 유효한 작업입니다. 다음 방법을 사용하여 (예를 들어 로그 회전을 실행하기 위해) 로그 테이블을 원자 적으로 이름을 바꿀 수 있습니다.USE mysql; DROP TABLE IF EXISTS general_log2; CREATE TABLE general_log2 LIKE general_log; RENAME 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
시스템 변수의 상태는 로그 테이블에 영향을 미치지 않습니다. 서버는 항상 로그 테이블에 기록 할 수 있습니다.로그 테이블에 기록 된 항목은 바이너리 로그에 기록되지 않기 때문에 슬레이브 서버에 복제되지 않습니다. (MySQL 5.6.9 이전에는, 이것은 항상 올바르게 적용되는 것은 없습니다 .Bug # 14741537를 참조하십시오.)
로그 테이블 또는 로그 파일을 플래시하려면
FLUSH TABLES
또는FLUSH LOGS
를 각각 사용합니다.로그 테이블의 분할은 허용되지 않습니다.
MySQL 5.6.6 이전에서는 mysqldump는
mysql
데이터베이스 덤프로general_log
테이블도slow_query_log
테이블도 덤프하지 않습니다. 5.6.6 이상에서는 덤프에는 그 테이블을 다시 작성하기위한 문이 포함되어 있기 때문에 덤프 파일을 다시로드 한 후 그 테이블이 손실되지 않습니다. 로그 테이블의 내용은 덤프되지 않습니다.