MySQL에서 마지막으로 실행 된 쿼리를 표시하는 방법은 무엇입니까?
모든 서버 에서 마지막으로 실행 된 쿼리를 표시하는 쿼리 / 방법이 있습니까?
MySQL> = 5.1.12를 사용하는 사용자는 런타임에이 옵션을 전체적으로 제어 할 수 있습니다.
- 실행
SET GLOBAL log_output = 'TABLE';
- 실행
SET GLOBAL general_log = 'ON';
- 테이블 좀 봐
mysql.general_log
테이블 대신 파일로 출력하려는 경우 :
SET GLOBAL log_output = "FILE";
기본값 입니다.SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
이 방법으로 .cnf 파일을 편집하는 것이 더 좋습니다.
my.cnf
파일을 편집하지 않고 잠재적으로 로깅을 켤 수 있습니다- 당신은 파일 시스템을 돌아 다니며 쿼리 로그를 찾고 있거나 심지어 완벽한 목적지에 대한 필요성으로 인해 산만하지 않습니다.
/var/log /var/data/log
/opt /home/mysql_savior/var
- 서버를 다시 시작하지 않아도 현재 연결이 중단됩니다.
- 서버를 다시 시작하면 시작한 위치가 그대로 남습니다 (기본적으로 로그는 여전히 꺼져 있음)
자세한 내용은 MySQL 5.1 참조 설명서-서버 시스템 변수-general_log를 참조 하십시오.
해당 종류의 진단에 일반 쿼리 로그 를 활성화 할 수 있습니다 . 일반적으로 프로덕션 서버에 모든 SELECT 쿼리를 기록하지는 않지만 성능을 저하시킵니다.
MySQL 설정을 편집하십시오 (예 : /etc/mysql/my.cnf)-이와 같은 줄을 찾거나 추가하십시오
[mysqld]
log = /var/log/mysql/mysql.log
변경 사항을 적용하려면 mysql을 다시 시작하십시오.
tail -f /var/log/mysql/mysql.log
이봐, 당신은 그들이 들어오는 쿼리를 볼 수 있습니다.
mysql 쿼리 로그를 모니터링하기 위해 흐르는 작업을 수행 할 수 있습니다.
mysql 구성 파일 my.cnf를 엽니 다.
sudo nano /etc/mysql/my.cnf
[mysqld]
제목 아래에서 다음 행을 검색 하고 주석을 해제하여 로그를 사용 가능하게하십시오.
general_log_file = /var/log/mysql/mysql.log
general_log = 1
변경 사항을 반영하기 위해 mysql 서버를 다시 시작하십시오.
sudo service mysql start
터미널에서 다음 명령으로 MySQL 서버 로그 모니터링
tail -f /var/log/mysql/mysql.log
SELECT * FROM mysql.general_log WHERE command_type ='Query' LIMIT total;
1) 일반 mysql 로깅이 활성화되면 구성에서 언급 한 내용을 기반으로 로그 파일 또는 테이블의 쿼리를 확인할 수 있습니다. 다음 명령으로 활성화 된 것을 확인하십시오
mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';
테이블에 쿼리 기록이 필요한 경우
Execute SET GLOBAL log_output = 'TABLE';
Execute SET GLOBAL general_log = 'ON';
mysql.general_log 테이블을 살펴보십시오.
파일로 출력하려는 경우 :
SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
2) .mysql_history 파일 cat ~ / .mysql_history에서 쿼리를 확인할 수도 있습니다.
mysql binlog 가 활성화 된 경우 mysql binlog 디렉토리를 찾아 Linux 콘솔에서 다음 명령을 실행하여 사용자가 실행 한 명령을 확인할 수 있습니다.
mysqlbinlog binlog.000001 > /tmp/statements.sql
활성화
[mysqld]
log = /var/log/mysql/mysql.log
또는 일반 로그는 mysql의 성능에 영향을 미칩니다
MySQL 구성을 변경하고 싶지 않다면 "Neor Profile SQL" http://www.profilesql.com 과 같은 SQL 프로파일 러를 사용할 수 있습니다 .
Paul의 답변을 읽은 후 https://dev.mysql.com/doc/refman/5.7/en/query-log.html 에 대한 자세한 정보를 찾기 위해 계속 파고 들었습니다.
사람이 실제로 유용한 코드를 찾았습니다. 컨텍스트 요약은 다음과 같습니다.
(참고 : 다음 코드는 내 코드가 아닙니다)
이 스크립트는 테이블 크기를 줄이는 데 도움이되는 테이블을 깨끗하게 유지하는 예제입니다. 하루가 지나면 약 180k 개의 로그 쿼리가 발생합니다. (파일에서 하루 30MB입니다.)
추가 열 (event_unix)을 추가 한 다음이 스크립트를 사용하여 로그를 깨끗하게 유지할 수 있습니다. 타임 스탬프를 Unix-timestamp로 업데이트하고 1 일보다 오래된 로그를 삭제 한 다음 event_time을 Timestamp로 업데이트합니다 event_unix에서 ... 조금 혼란스럽게 들리지만 훌륭하게 작동합니다.
새 열에 대한 명령 :
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
ALTER TABLE `general_log_temp`
ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
정리 스크립트 :
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);
DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;
UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
크레딧은 Sebastian Kaiser (코드의 원저자)에게 전달됩니다.
누군가가 내가했던 것처럼 유용 할 수 있기를 바랍니다.
리눅스에서 다음을 볼 수 있습니다
cd /root
ls -al
vi .mysql_history
도움이 될 수 있습니다
참고 URL : https://stackoverflow.com/questions/650238/how-to-show-the-last-queries-executed-on-mysql
'Programing' 카테고리의 다른 글
Git에서 HEAD, 작업 트리 및 인덱스의 차이점은 무엇입니까? (0) | 2020.02.17 |
---|---|
서버에 요청을 보낼 때 curl에 의해 작성된 요청 헤더를 어떻게 볼 수 있습니까? (0) | 2020.02.17 |
포인터 명확성의 배열 / 배열에 대한 C 포인터 (0) | 2020.02.17 |
자동 증분 버전 번호를 얻는 방법 (Visual Studio)? (0) | 2020.02.17 |
컨텐츠 스크립트를 사용하여 페이지 컨텍스트에 코드 삽입 (0) | 2020.02.17 |