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
이봐, 프레스토, 질문이 들어오는 걸 보면 돼.
SELECT * FROM mysql.general_log WHERE command_type ='Query' LIMIT total;
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
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 설정을 변경할 필요가 없는 경우 "Neor Profile SQL" http://www.profilesql.com 등의 SQL 프로파일러를 사용할 수 있습니다.
mysql binlog가 활성화되어 있는 경우 mysql binlog 디렉토리를 참조하여 Linux 콘솔에서 다음 명령을 실행하여 사용자가 실행한 명령을 확인할 수 있습니다.
mysqlbinlog binlog.000001 > /tmp/statements.sql
유효하게 하다
[mysqld]
log = /var/log/mysql/mysql.log
또는 일반 로그는 mysql의 성능에 영향을 미칩니다.
Paul의 답변을 읽은 후, 나는 https://dev.mysql.com/doc/refman/5.7/en/query-log.html에서 더 많은 정보를 찾아보았다.
나는 사람이 정말 유용한 코드를 발견했다.여기 문맥의 요약이 있습니다.
(주의: 다음 코드는 내 코드가 아닙니다)
이 스크립트는 테이블을 깨끗하게 유지하기 위한 예제이며, 테이블 크기를 줄이는 데 도움이 됩니다.하루 후와 마찬가지로 로그 쿼리는 약 18만 건입니다.(파일당 1일 30MB입니다)
추가 열(event_unix)을 추가한 후 이 스크립트를 사용하여 로그를 깨끗한 상태로 유지할 수 있습니다.타임스탬프를 Unix-timestamp로 갱신하고 1일 이상 경과한 로그를 삭제한 후 event_unix에서event_time을 Timestamp로 갱신합니다.조금 헷갈리긴 하지만 잘 되고 있어요.
새 열에 대한 명령:
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';
세바스찬 카이저(코드 원저작자)의 공로입니다.
누군가 저처럼 유용하게 써주길 바랍니다.
Linux에서 다음 항목을 볼 수 있습니다.
cd /root
ls -al
vi .mysql_history도움이 될지도 몰라
언급URL : https://stackoverflow.com/questions/650238/how-to-show-the-last-queries-executed-on-mysql
'source' 카테고리의 다른 글
| MySQL tinyInt에서 인덱싱할 수 있습니까? (0) | 2023.01.25 |
|---|---|
| MySQL phpMyAdmin: 오류 #1932 - 엔진에 테이블이 없습니다. (0) | 2023.01.25 |
| PHP에서 체크박스를 켜면 어떻게 읽나요? (0) | 2023.01.25 |
| fs.read File에서 데이터를 가져옵니다. (0) | 2023.01.25 |
| 왜 Python이 기능적 프로그래밍에 적합하지 않은가? (0) | 2023.01.25 |