답변:
첫째, 이 로그 파일은 바쁜 서버에 매우 커질 수 있음을 기억하십시오.
mysql <5.1.29의 경우 :
쿼리 로그를 활성화하려면 섹션 /etc/my.cnf
에 넣으십시오.[mysqld]
log = /path/to/query.log #works for mysql < 5.1.29
또한 MySQL 콘솔에서 활성화하려면
SET general_log = 1;
http://dev.mysql.com/doc/refman/5.1/en/query-log.html을 참조 하십시오
MySQL 5.1.29 이상
mysql 5.1.29+에서는 log
옵션이 더 이상 사용되지 않습니다. 로그 파일을 지정하고 로깅을 활성화하려면 다음 [mysqld]
섹션의 my.cnf에서이를 사용 하십시오.
general_log_file = /path/to/query.log
general_log = 1
또는 MySQL 콘솔에서 로깅을 켜려면 (어쨌든 로그 파일 위치를 지정하거나 기본 위치를 찾아야 함) :
SET global general_log = 1;
또한 느린 쿼리 또는 인덱스를 사용하지 않는 쿼리 만 기록하는 추가 옵션이 있습니다.
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
다른 관련 질문에 대한이 답변을 살펴보십시오. 다시 시작하지 않고 라이브 서버에서 로그를 활성화, 비활성화 및 확인하는 방법을 보여줍니다.
요약은 다음과 같습니다.
MySQL 서버를 원하지 않거나 재시작 할 수없는 경우 실행중인 서버에서 다음과 같이 진행할 수 있습니다.
로그 테이블 만들기 ( 답변 참조 )
데이터베이스에서 쿼리 로깅을 사용하도록 설정하십시오 (문자열 'table'은 문자 그대로 입력해야하며 테이블 이름으로 대체하지 않아야합니다. Thanks Nicholas Pickering )
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log;
SET global general_log = 0;
다른 페이지로드를 빠르게 최적화하려는 경우이 방법을 사용하여 로깅합니다. 조금 팁입니다 ...
테이블에 로깅
SET global general_log = 1;
SET global log_output = 'table';
그런 다음 내 mysql.general_log
테이블 에서 선택하여 최근 쿼리를 검색 할 수 있습니다 .
그런 다음 tail -f
mysql.log 와 비슷한 것을 할 수 있지만 더 세밀하게 조정할 수 있습니다 ...
select * from mysql.general_log
where event_time > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> ""
and argument <> "SET NAMES 'UTF8'" and argument <> "SHOW STATUS"
and command_type = "Query" and argument <> "SET PROFILING=1"
이를 통해 시도하고 줄일 수있는 쿼리를 쉽게 볼 수 있습니다. 8 초 간격을 사용하여 마지막 8 초 내에 실행 된 쿼리 만 가져옵니다.
이것은 이미 주석에 있지만 자체 답변이 필요합니다. 구성 파일을 편집하지 않고 : mysql에서 루트로 수행하십시오.
SET global general_log_file='/tmp/mysql.log';
SET global log_output = 'file';
SET global general_log = on;
나중에 끄는 것을 잊지 마십시오 :
SET global general_log = off;
/tmp/
과 같은 위치에있을 수 있습니다./tmp/systemd-private-...-mariadb.service-.../tmp/
다음을 사용하여 일반 쿼리 로그 (모든 쿼리를 기록)를 비활성화하거나 활성화 할 수 있습니다.
SET GLOBAL general_log = 1 # (or 0 to disable)
또한 MySQL 로그 파일을 사용하여 쿼리를 볼 수 있기를 원했고 아래 지침 으로이 문제를 해결했습니다.
/etc/mysql/mysql.conf.d
아래 줄을 활성화하십시오.
general_log_file = /var/log/mysql/mysql.log
general_log = 1
/etc/init.d/mysql restart
/var/log/mysql/
로그를 확인하십시오// To see global variable is enabled or not and location of query log
SHOW VARIABLES like 'general%';
// Set query log on
SET GLOBAL general_log = ON;
Windows에서는 간단하게 이동할 수 있습니다.
C:\wamp\bin\mysql\mysql5.1.53\my.ini
이 줄을 my.ini에 삽입하십시오
general_log_file = c:/wamp/logs/mysql_query_log.log
의 my.ini 파일은 마지막으로 다음과 같습니다
...
...
...
socket = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log = c:/wamp/logs/mysql_query_log.log #dump query logs in this file
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
...
...
...
...
MySQL 5.6 버전에는 버그가 있습니다. mysqld조차도 다음과 같이 표시됩니다.
Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
실제 설정은 다음 순서로 읽습니다.
Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
파일 확인 : "C : \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini"
누군가를 돕기를 바랍니다.
질문에 이미 큰 답변이 있으므로 질문에 대한 정확한 답변이 아닙니다. 이것은 부가 정보입니다. general_log를 활성화하면 실제로 MySQL 성능에 흠집이 생깁니다. general_log =1
실수로 프로덕션 서버에 두고 성능이 다른 서버의 유사한 설정과 비교할 수없는 이유를 찾는 데 몇 시간을 보냈습니다. 그런 다음 일반 로그 사용으로 인한 영향을 설명하는 이것을 발견했습니다. http://www.fromdual.com/general_query_log_vs_mysql_performance .
이야기의 요지 general_log=1
, .cnf
파일에 넣지 마십시오 . 대신 set global general_log =1
잠깐 동안 사용 하여 찾으려는 정보를 찾은 다음 끄십시오.
한 시점에서 일반 로그를 삭제하고 다시 만들어야했습니다. 레크 리 에이션 중에 문자 세트가 엉망이되어 로그 에이 오류가 발생했습니다.
[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'
따라서 "로깅이 켜져 있는지 확인하십시오"라는 표준 답변이 효과가 없으면 필드에 올바른 문자 세트가 있는지 확인하십시오.