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을 설치했습니다 .EditLine 래퍼를 사용하여 osx10.11 (x86_64) 용 mysql Ver 14.14 Distrib 5.7.15
기록을 위해 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 테이블입니다.
mysql 로그온은 실제로 성능에 영향을 미치지 만, 현명한 일이 될 수 있습니다.
나는 보통 dev 서버에 그대로 둡니다 (우리를 미치게 만들 때 제외 :))
AWS RDS MYSQL을 사용하는 경우 단계별 안내서를 참조하십시오.
'file'출력으로 설정하면 AWS RDS "Log"콘솔에서 직접 로그를 볼 수 있습니다.
OS / MySQL 버전 :
$ uname -a
Darwin Raphaels-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Thu Jun 21 20:07:40 PDT 2018; root:xnu-3248.73.11~1/RELEASE_X86_64 x86_64
$ mysql --version
/usr/local/mysql/bin/mysql Ver 14.14 Distrib 5.6.23, for osx10.8 (x86_64) using EditLine wrapper
로깅 추가 (예를 들어, /var/log/...
Mac OS에서 가장 좋은 경로는 아니지만 생각 합니다.
sudo vi ./usr/local/mysql-5.6.23-osx10.8-x86_64/my.cnf
[mysqld]
general_log = on
general_log_file=/var/log/mysql/mysqld_general.log
MySQL을 재시작
결과:
$ sudo tail -f /var/log/mysql/mysqld_general.log
181210 9:41:04 21 Connect root@localhost on employees
21 Query /* mysql-connector-java-5.1.47 ( Revision: fe1903b1ecb4a96a917f7ed3190d80c049b1de29 ) */SELECT @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@collation_server AS collation_server, @@collation_connection AS collation_connection, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_buffer_length AS net_buffer_length, @@net_write_timeout AS net_write_timeout, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS transaction_isolation, @@wait_timeout AS wait_timeout
21 Query SET NAMES latin1
21 Query SET character_set_results = NULL
21 Query SET autocommit=1
21 Query SELECT USER()
21 Query SELECT USER()
181210 9:41:10 21 Query show tables
181210 9:41:25 21 Query select count(*) from current_dept_emp
참고 URL : https://stackoverflow.com/questions/303994/log-all-queries-in-mysql
'development' 카테고리의 다른 글
모든 배열 요소를 0으로 초기화하는 단축키가 있습니까? (0) | 2020.04.01 |
---|---|
'\ r': 명령을 찾을 수 없음-.bashrc / .bash_profile (0) | 2020.04.01 |
NSLocalizedString이 특정 언어를 사용하도록하는 방법 (0) | 2020.04.01 |
IntelliJ IDEA를 사용하여 Java 코드 라인을 계산하는 방법은 무엇입니까? (0) | 2020.03.31 |
SQL Server에서 날짜 시간을 자르려면 어떻게해야합니까? (0) | 2020.03.31 |