Loading...
MySQL 9.5 Reference Manual 9.5의 7.4.3 The General Query Log의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
general query log는 mysqld가 수행하는 작업에 대한 일반적인 기록입니다. 서버는 클라이언트가 연결(connect) 또는 연결 해제(disconnect)할 때 이 로그에 정보를 기록하고, 클라이언트로부터 수신한 각 SQL 문장을 기록합니다. general query log는 클라이언트에 오류가 의심될 때 그 클라이언트가 mysqld에 정확히 어떤 내용을 보냈는지 알고자 할 때 매우 유용할 수 있습니다.
클라이언트가 연결했을 때를 나타내는 각 줄에는 연결을 설정하는 데 사용된 프로토콜을 나타내기 위해 using connection_type도 포함됩니다.
connection_type 은 TCP/IP(SSL 없이 설정된 TCP/IP 연결), SSL/TLS(SSL로 설정된 TCP/IP 연결), Socket(Unix 소켓 파일 연결), Named Pipe(Windows 네임드 파이프 연결), Shared Memory(Windows 공유 메모리 연결) 중 하나입니다.
mysqld는 쿼리 로그에 문장을 수신한 순서대로 기록하는데, 이는 실제 실행 순서와는 다를 수 있습니다. 이러한 로깅 순서는 바이너리 로그의 경우와는 대조적입니다. 바이너리 로그에는 문장이 실행된 후이지만 어떤 잠금도 해제되기 전에 기록됩니다. 또한 쿼리 로그에는 데이터만을 조회하는 문장이 포함될 수 있지만, 이러한 문장은 바이너리 로그에는 결코 기록되지 않습니다.
복제 소스 서버에서 문장 기반 바이너리 로깅을 사용하는 경우, 소스가 수신한 문장은 각 레플리카의 쿼리 로그에 기록됩니다. 클라이언트가 mysqlbinlog 유틸리티로 이벤트를 읽고 이를 서버에 전달하면, 소스의 쿼리 로그에도 문장이 기록됩니다.
그러나 행 기반 바이너리 로깅을 사용하는 경우, 업데이트는 SQL 문장이 아닌 행 변경 사항으로 전송되므로, binlog_format이 ROW인 경우 이러한 문장은 쿼리 로그에 전혀 기록되지 않습니다. 이 변수값이 MIXED로 설정된 경우에도 사용된 문장에 따라 특정 업데이트는 쿼리 로그에 기록되지 않을 수 있습니다. 보다 자세한 내용은 Section 19.2.1.1, “Advantages and Disadvantages of Statement-Based and Row-Based Replication”을 참조하십시오.
기본적으로 general query log는 비활성화되어 있습니다. 초기 general query log 상태를 명시적으로 지정하려면 --general_log[={0|1}]을 사용하십시오. 인수를 생략하거나 인수로 1을 지정하면 --general_log는 로그를 활성화합니다. 인수로 0을 지정하면 이 옵션은 로그를 비활성화합니다. 로그 파일 이름을 지정하려면 --general_log_file=file_name을 사용하십시오. 로그 목적지를 지정하려면 log_output 시스템 변수를 사용하십시오(이는 Section 7.4.1, “Selecting General Query Log and Slow Query Log Output Destinations”에 설명되어 있습니다).
참고
TABLE 로그 목적지를 지정하는 경우, Log Tables and “Too many open files” Errors를 참조하십시오.
general query log 파일 이름을 지정하지 않으면 기본 이름은 host_name.log입니다. 서버는 절대 경로 이름으로 다른 디렉터리를 지정하지 않는 한 데이터 디렉터리에 파일을 생성합니다.
런타임 중에 general query log를 비활성화 또는 활성화하거나 로그 파일 이름을 변경하려면 전역 general_log 및 general_log_file 시스템 변수를 사용하십시오. general_log를 0(또는 OFF)으로 설정하면 로그를 비활성화하고, 1(또는 ON)으로 설정하면 로그를 활성화합니다. 로그 파일 이름을 지정하려면 general_log_file을 설정하십시오. 이미 로그 파일이 열려 있는 경우, 해당 파일은 닫히고 새 파일이 열립니다.
general query log가 활성화된 경우, 서버는 log_output 시스템 변수로 지정된 모든 목적지에 출력 내용을 기록합니다. 로그를 활성화하면, 서버는 로그 파일을 열고 시작 메시지를 그곳에 기록합니다. 그러나 FILE 로그 목적지가 선택되지 않는 한, 그 이후의 쿼리에 대한 파일 로깅은 발생하지 않습니다. 목적지가 NONE이면, general log가 활성화되어 있어도 서버는 어떠한 쿼리도 기록하지 않습니다. 로그 목적지 값에 FILE이 포함되지 않으면 로그 파일 이름을 설정해도 로깅에는 아무런 영향이 없습니다.
서버를 재시작하거나 로그를 플러시해도 새 general query log 파일이 생성되지는 않습니다(다만 플러시는 파일을 닫았다가 다시 엽니다). 파일 이름을 바꾸고 새 파일을 생성하려면 다음 명령을 사용하십시오:
1$> mv host_name.log host_name-old.log 2$> mysqladmin flush-logs general 3$> mv host_name-old.log backup-directory
Windows에서는 mv 대신 rename을 사용하십시오.
로그를 비활성화하여 런타임 동안 general query log 파일의 이름을 바꿀 수도 있습니다:
1SET GLOBAL general_log = 'OFF';
로그를 비활성화한 상태에서(예를 들어 명령행에서) 로그 파일 이름을 외부에서 변경하십시오. 그런 다음 로그를 다시 활성화하십시오:
1SET GLOBAL general_log = 'ON';
이 방법은 어떤 플랫폼에서나 동작하며 서버 재시작이 필요하지 않습니다.
현재 세션에 대해 general query logging을 비활성화하거나 활성화하려면, 세션 sql_log_off 변수를 ON 또는 OFF로 설정하십시오. (이는 general query log 자체가 활성화되어 있다고 가정합니다.)
general query log에 기록되는 문장의 비밀번호는 서버에 의해 평문이 그대로 나타나지 않도록 다시 작성됩니다(rewrite). general query log에 대해서만 비밀번호 리라이트를 억제하려면 서버를 --log-raw 옵션과 함께 시작하십시오. 이 옵션은 서버가 수신한 문장의 정확한 텍스트를 확인하는 등 진단 목적에는 유용할 수 있지만, 보안상의 이유로 프로덕션 환경에서는 사용을 권장하지 않습니다. Section 8.1.2.3, “Passwords and Logging”도 참조하십시오.
비밀번호 리라이트의 한 가지 함의는, 구문 오류 등으로 인해 파싱할 수 없는 문장은 비밀번호가 없는지 여부를 알 수 없으므로 general query log에 기록되지 않는다는 점입니다. 오류가 있는 문장을 포함하여 모든 문장의 로깅이 필요한 사용 사례에서는 --log-raw 옵션을 사용해야 하며, 이 경우 비밀번호 리라이트 역시 우회된다는 점을 유념해야 합니다.
비밀번호 리라이트는 오직 평문 비밀번호가 예상되는 경우에만 발생합니다. 비밀번호 해시 값을 예상하는 구문을 가진 문장의 경우, 리라이트는 발생하지 않습니다. 그러한 구문에 평문 비밀번호를 잘못 제공한 경우, 비밀번호는 리라이트 없이 제공된 그대로 로그에 기록됩니다.
log_timestamps 시스템 변수는 general query log 파일(뿐만 아니라 slow query log 파일과 에러 로그)에 기록되는 메시지의 타임스탬프에 사용되는 시간대를 제어합니다. 이는 로그 테이블에 기록되는 general query log 및 slow query log 메시지의 시간대에는 영향을 주지 않지만, 해당 테이블에서 조회한 행은 CONVERT_TZ()를 사용하거나 세션 time_zone 시스템 변수를 설정하여 로컬 시스템 시간대에서 원하는 시간대로 변환할 수 있습니다.
7.4.2 The Error Log
7.4.4 The Binary Log