5.2.3 일반 쿼리 로그
일반 쿼리 로그는 mysqld의 실행 내용의 일반적인 기록입니다. 서버는 클라이언트가 연결 또는 연결 해제 할 때 정보를 로그에 기록 클라이언트에서받은 각 SQL 문을 로그에 기록합니다. 일반 쿼리 로그는 클라이언트 측에서 오류가 의심 될 때, 클라이언트가 mysqld에 보낸 내용을 정확하게 알고 싶은 경우에 매우 유용 할 수 있습니다.
mysqld는 문을받은 순서대로 쿼리 로그에 기록하지만 문이 실행 된 순서와 다를 수 있습니다. 이 기록 순서는 바이너리 로그의 순서와는 대조적으로, 바이너리 로그의 경우 문은 그것이 실행 된 후 잠금이 출시되기 전에 기록됩니다. 또한, 쿼리 로그는 데이터를 선택하면 문을 저장할 수도 있고, 그런 문은 바이너리 로그에는 일절 쓰지 않습니다.
명령문 기반 로깅을 사용하는 경우 모든 문은 쿼리 로그에 기록되지만 행 기반 로깅을 사용할 경우 업데이트는 SQL 문이 아닌 행의 변경으로 전송되기 때문에 binlog_format
가 ROW
때 이러한 문은 쿼리 로그에 전혀 기록되지 않습니다. 사용되는 명령문에 따라이 변수가 MIXED
로 설정된 경우 소정의 업데이트가 쿼리 로그에 기록되지 않을 수도 있습니다. 자세한 내용은 섹션 17.1.2.1 "문 기반 및 열 기반 리플리케이션의 장점과 단점" 을 참조하십시오.
기본적으로는 일반 쿼리 로그는 비활성화되어 있습니다. 초기 일반 쿼리 로그 상태를 명시 적으로 지정하려면 --general_log[={0|1}]
를 사용합니다. 인수를 지정하지 않거나 인수가 1이면 --general_log
의해 로그가 활성화됩니다. 인수가 0 인 경우이 옵션은 로그를 비활성화합니다. 로그 파일 이름을 지정하려면 --general_log_file=
을 사용합니다. 로그 대상을 지정하려면 ( 섹션 5.2.1 "일반 쿼리 로그와 슬로우 쿼리 로그 대상 선택" 에서 설명되는) file_name
--log-output
을 사용합니다.
일반 쿼리 로그 파일의 이름을 지정하지 않으면 기본 이름은
입니다. 서버는 다른 디렉토리를 지정하는 절대 경로 이름이 지정되지 않는 한 데이터 디렉토리에 파일을 만듭니다. host_name
.log
실행시에 일반 쿼리 로그를 비활성화 또는 활성화하거나 로그 파일 이름을 변경하거나하려면 글로벌 general_log
및 general_log_file
시스템 변수를 사용합니다. general_log
를 0 (또는 OFF
)로 설정하면 로그가 비활성화되고, 1 (또는 ON
)하면 활성화됩니다. 로그 파일의 이름을 지정하려면 general_log_file
을 지정합니다. 로그 파일이 이미 열려있는 경우 로그 파일을 닫고 새 파일을 엽니 다.
일반 쿼리 로그가 활성화되면 서버는 --log-output
옵션 또는 log_output
시스템 변수에 의해 지정된 모든 대상에 출력을 씁니다. 로깅을 사용하면 서버는 로그 파일을 열고 로그 파일에 부팅 메시지를 씁니다. 그러나 FILE
로그 대상이 선택되지 않는 한 파일에 대한 더 이상의 쿼리 로깅이 수행되지 않습니다. 대상이 NONE
의 경우 일반 로그가 유효한 경우에도 서버는 쿼리를 쓰지 않습니다. 로그 출력 값에 FILE
이 포함되어 있지 않은 경우, 로그 파일 이름을 설정해도 로깅에 미치는 영향은 없습니다.
서버 다시 시작 및 로그 플래시를하더라도 새로운 일반 쿼리 로그 파일은 생성되지 않습니다 (그러나 플래시에서 파일을 닫았다가 다시 엽니 다). 파일 이름을 변경하여 새 파일을 만들려면 다음 명령을 사용합니다.
shell>mv host_name .log host_name -old.log
shell>mysqladmin flush-logs
shell>mv host_name -old.log backup-directory
Windows에서 mv 대신 rename을 사용하십시오.
또한 로그를 비활성화하여 실행시에 일반 쿼리 로그 파일의 이름을 변경 할 수 있습니다.
SET GLOBAL general_log = 'OFF';
로그가 비활성화되어있는 경우, 명령 행 등 외부에서 로그 파일의 이름을 변경하십시오. 그 후, 로그를 다시 활성화합니다.
SET GLOBAL general_log = 'ON';
이 방법은 모든 플랫폼에서 작동하는 서버 재부팅을 필요로하지 않습니다.
세션 변수 sql_log_off
를 ON
또는 OFF
로 설정하여 현재 연결에 대한 일반 쿼리 로깅을 비활성화하거나 활성화 할 수 있습니다.
MySQL 5.6.3 이후에서는 일반 쿼리 로그에 기록되는 문 암호는 서버에 의해 고쳐 쓸 수있어 문자 그대로 일반 텍스트로 표시되는 것은 아닙니다. 일반 쿼리 로그에 대한 암호 다시는 --log-raw
옵션으로 서버를 시작하여 억제 할 수 있습니다. 이 옵션은 서버에 의해 주어진 문장의 정확한 텍스트를 표시 할 때 진단 목적으로 유용 할 수 있지만 보안상의 이유로 프로덕션 용도로는 사용되지 않습니다.
MySQL 5.6.3 이전에서는 문에서 암호는 고쳐 쓸 수 없기 때문에 일반 쿼리 로그를 보호하도록하십시오. 섹션 6.1.2.3 "암호 및 로깅" 을 참조하십시오.
MySQL 5.6.3에서 암호 갱신의 도입에 의한 하나의 영향으로 (구문 오류 등의 이유로) 구문 분석 할 수없는 문이 암호없이임을 인식 할 수 없기 때문에 일반 쿼리 로그에 기록되지 않을 것입니다 . 오류를 가진 사람을 포함하는 모든 문 로깅을 필요로하는 사용 예는 --log-raw
옵션을 사용하지만이 옵션은 암호 기록을 우회 할 수 있음을 유념하십시오.