[mysql] MySQL의 모든 쿼리를 기록

mysql 데이터베이스에서 감사 로깅을 켤 수 있습니까?

기본적으로 모든 쿼리를 한 시간 동안 모니터링하고 로그를 파일로 덤프하려고합니다.



답변

–log 옵션으로 mysql을 시작하십시오 :

mysqld --log=log_file_name

또는 my.cnf파일에 다음을 배치 하십시오.

log = log_file_name

어느 쪽이든 모든 쿼리를 log_file_name에 기록합니다.

--log-slow-queries대신 옵션을 사용하여 느린 쿼리 만 기록 할 수도 있습니다 --log. 기본적으로 10 초 이상 걸리는 쿼리는 느리게 간주됩니다 long_query_time. 기록하기 전에 쿼리를 실행하는 데 걸리는 시간 (초) 으로 설정 하여 이를 변경할 수 있습니다 .


답변

( 참고 : mysql-5.6 +의 경우 작동하지 않습니다. 아래로 스크롤 하거나 여기를 클릭 하면 mysql-5.6 +에 적용되는 솔루션이 있습니다 .)

MySQL 서버를 원하지 않거나 재시작 할 수없는 경우 실행중인 서버에서 다음과 같이 진행할 수 있습니다.

  • mysql데이터베이스 에서 로그 테이블 작성
  CREATE TABLE `slow_log` (
   `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
                          ON UPDATE CURRENT_TIMESTAMP,
   `user_host` mediumtext NOT NULL,
   `query_time` time NOT NULL,
   `lock_time` time NOT NULL,
   `rows_sent` int(11) NOT NULL,
   `rows_examined` int(11) NOT NULL,
   `db` varchar(512) NOT NULL,
   `last_insert_id` int(11) NOT NULL,
   `insert_id` int(11) NOT NULL,
   `server_id` int(10) unsigned NOT NULL,
   `sql_text` mediumtext NOT NULL,
   `thread_id` bigint(21) unsigned NOT NULL
  ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
  CREATE TABLE `general_log` (
   `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
                          ON UPDATE CURRENT_TIMESTAMP,
   `user_host` mediumtext NOT NULL,
   `thread_id` bigint(21) unsigned NOT NULL,
   `server_id` int(10) unsigned NOT NULL,
   `command_type` varchar(64) NOT NULL,
   `argument` mediumtext NOT NULL
  ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
  • 데이터베이스에서 쿼리 로깅 사용
SET global general_log = 1;
SET global log_output = 'table';
  • 로그보기
select * from mysql.general_log
  • 데이터베이스에서 쿼리 로깅 비활성화
SET global general_log = 0;


답변

내가 여기에 온 것 외에도 다음을 실행하면 다시 시작하지 않고 쿼리를 로그 파일에 덤프하는 가장 간단한 방법이었습니다

SET global log_output = 'FILE';
SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';
SET global general_log = 1;

로 끌 수 있습니다

SET global general_log = 0;


답변

mysql 5.6 이상에서는 최고 답변이 작동하지 않습니다. 대신 이것을 사용하십시오 :

[mysqld]
general_log = on
general_log_file=/usr/log/general.log

my.cnf / my.ini 파일에

우분투 / 데비안 : /etc/mysql/my.cnf
Windows : c : \ ProgramData \ MySQL \ MySQL Server 5.x
wamp : c : \ wamp \ bin \ mysql \ mysqlx.yz \ my.ini
xampp : c : \ xampp \ mysql \ bin \ my.ini.


답변

테이블에 로그를 사용하도록 설정

mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';

선택 쿼리로 로그보기

select * from mysql.general_log


답변

다시 시작하지 않고 MySQL 일반 쿼리 로그를 활성화하는 빠른 방법입니다.

mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL general_log_file = '/var/www/nanhe/log/all.log';

Homebrew, mysql 버전 : mySQL Ver 14.14 Distrib 5.7.15, EditLine 래퍼를 사용하여 osx10.11 (x86_64)을 통해 mysql을 설치했습니다.


답변

기록을 위해 general_log 및 slow_log가 5.1.6에서 도입되었습니다.

http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html

5.2.1. 일반 쿼리 및 느린 쿼리 로그 출력 대상 선택

MySQL 5.1.6부터 MySQL 서버는 일반 쿼리 로그 및 느린 쿼리 로그에 대한 출력 대상이 활성화 된 경우 출력 대상을 유연하게 제어 할 수 있습니다. 로그 항목의 가능한 대상은 mysql 데이터베이스의 로그 파일 또는 general_log 및 slow_log 테이블입니다.