MySQL에서 로그 파일을 보는 방법은 무엇입니까?


176

Mysql 서버는 언제 어떤 쿼리가 실행되는지와 같은 모든 활동의 기록을 유지하는 로그 파일을 생성한다는 것을 읽었습니다.

아무도 내 시스템에서 그것이 어디에 있는지 말해 줄 수 있습니까? 어떻게 읽을 수 있습니까?

기본적으로 다른 입력 [두 날짜 사이의 백업]으로 데이터베이스를 백업해야하므로 여기에서 로그 파일을 사용해야한다고 생각합니다.

사용자 이름 및 비밀번호와 같은 민감한 정보가 기록 될 수 있기 때문에이 로그를 어떻게 든 보호해야한다고 생각합니다 (모든 쿼리에 필요한 경우). 그래서 쉽게 볼 수없는, 안전 할 수 있습니까?

시스템에 대한 루트 액세스 권한이 있습니다. 어떻게 로그를 볼 수 있습니까?

/var/log/mysql.log를 열려고하면 비어 있습니다.

이것은 내 구성 파일입니다.

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
log = /var/log/mysql/mysql.log 
binlog-do-db=zero



user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking

bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

답변:


164

다음은이를 활성화하는 간단한 방법입니다. mysql에서는 프로젝트 개발 중에 주로 필요한 3 개의 로그를 자주 볼 필요가 있습니다.

  • The Error Log. 서버가 실행되는 동안 발생하는 오류에 대한 정보를 포함합니다 (서버 시작 및 중지).

  • The General Query Log. 이것은 mysqld 가하고있는 일 (연결, 연결 끊기, 쿼리)에 대한 일반적인 기록입니다

  • The Slow Query Log. "느린"SQL 문 (이름으로 표시)으로 구성됩니다.

기본적으로 MYSQL에서는 로그 파일이 활성화되어 있지 않습니다. 모든 오류는 syslog ( /var/log/syslog)에 표시됩니다.

사용하려면 아래 단계를 따르십시오.

1 단계 : 이 파일 ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf )로 이동하여 해당 줄을 제거하거나 주석 처리하십시오.

2 단계 : mysql conf 파일 ( /etc/mysql/my.cnf)로 이동하여 다음 줄을 추가하십시오

오류 로그를 추가하려면 다음을 추가하십시오.

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log

일반 쿼리 로그를 활성화하려면 다음을 추가하십시오.

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

느린 쿼리 로그를 활성화하려면 다음을 추가하십시오.

log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

3 단계 : 파일을 저장하고 다음 명령을 사용하여 mysql을 다시 시작하십시오.

service mysql restart

런타임에 로그를 활성화하려면 mysql 클라이언트 ( mysql -u root -p)에 로그인하여 다음을 제공하십시오.

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

마지막으로 여기서 언급하고 싶은 것은 블로그에서 읽은 것입니다 . 감사. 그것은 나를 위해 작동합니다.

블로그를 방문 하려면 여기 를 클릭 하십시오


2
나는 당신보다 몇 가지를 쓰는 것을 잊었다 고 생각합니다. 1 단계가 불완전하고 '블로그'링크가 누락되었습니다.
Athafoud

안녕하세요, @Athafoud, 지금 링크를 찾으십시오.
loyola

3
링크 된 블로그 기사는 /etc/mysql/conf.d/mysqld_safe_syslog.cnf오류 로그가 활성화 된 경우에만 수정을 언급합니다 . 그러나 현재 작성된이 답변은 모든 로그에 대해 제안하는 것으로 보입니다.
Melebius

2
내 서버 버전은 5.6.35입니다. Ross Smith II의 대답은 여기에 효과적입니다. 나는 설정해야합니다 slow_query_log = 1;, slow_query_log_file = /var/log/mysql/mysql-slow-query.log그리고 long_query_time = 60[mysqld를] 아래. 구성을 시작하려고하면 서버가 시작되지만 느리고 느리고 오류가 발생합니다. 나는 버전이 다르고 오라클에서는 변수 이름을 통합하기를 원했습니다. 또한 : IMHO 2 초는 그리 길지 않습니다.
JackLeEmmerdeur 2016 년

1
해당 파일에 대한 권한은 어떻습니까? 많은 경우에 로그 파일이 생성되지 않는 것을 보았습니다.
MagePsycho

42

mysql에서 쿼리 로깅을 활성화해야합니다.

  1. /etc/my.cnf 편집

    [mysqld]
    log = / tmp / mysql.log
    
  2. 컴퓨터 또는 mysqld 서비스를 재시작하십시오

    서비스 mysqld 재시작
    
  3. mysql / mysql 콘솔을 사용하는 phpmyadmin / any 응용 프로그램을 열고 쿼리를 실행하십시오

  4. cat /tmp/mysql.log (당신은 쿼리를 볼 수 있습니다)


상관 없습니다, 단지 쿼리가 db를 통해 실행되는지 확인하십시오
danidacar

6
유효하지 않은 경로. 당신은 /etc/my.cnf가 /etc/mysql/my.cnf이어야합니다
mystic cola

39

MySQL 로그는 다음과 같은 전역 변수에 의해 결정됩니다.

  • log_error 오류 메시지 로그
  • general_log_file일반 쿼리 로그 파일 (에 의해 활성화 된 경우 general_log);
  • slow_query_log_file느린 쿼리 로그 파일의 경우 (에 의해 활성화 된 경우 slow_query_log);

설정과 위치를 보려면 다음 셸 명령을 실행하십시오.

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log

오류 로그 값을 인쇄하려면 터미널에서 다음 명령을 실행하십시오.

mysql -e "SELECT @@GLOBAL.log_error"

오류 로그 파일의 내용을 실시간으로 읽으려면 다음을 실행하십시오.

sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")

참고 : 조회 Control- C완료시

일반 로그가 활성화되면 다음을 시도하십시오.

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")

mysql비밀번호 액세스와 함께 사용하려면 -p또는 -pMYPASS매개 변수를 추가하십시오 . 기억하기 위해 ~/.my.cnf예를 들어

[client]
user=root
password=root

다음에 기억 될 것입니다.


1
또는 비밀번호를 입력해야하는 경우 다음을 시도하십시오. mysql -p -se "SHOW VARIABLES"| grep -e log_error -e general_log -e slow_query_log
Paul Chernoch

9

내 (LAMP가 설치되어 있음) / etc / mysql /my.cnf 파일에서 다음을 발견했습니다. [mysqld] 섹션에서 행을 주석 처리했습니다.

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

터미널을 사용 하여이 파일을 슈퍼 유저로 열어야했습니다.

sudo geany /etc/mysql/my.cnf

(gedit 또는 VI 대신 Geany를 사용하는 것을 선호하지만 중요하지 않습니다)

방금 주석 처리를 해제하고 파일을 저장 한 다음 mysql을 restatt

sudo service mysql restart

여러 쿼리를 실행하고 위의 파일 (/var/log/mysql/mysql.log)을 열고 로그가 있습니다 :)


그것이 당신을 위해 작동 할 수는 있지만, 나에게 도움이되지는 않지만 "Index Corrupted"와 같은 주요 예외조차도 기록되지 않습니다. 시작 및 종료 문제 만
user3338098

8

MySQL 참조 매뉴얼에서 :

기본적으로 모든 로그 파일은 데이터 디렉토리에 작성됩니다.

/var/lib/mysql폴더를 확인하십시오 .


1
하지만 mysql 폴더를 열 수 없습니다. 로그 파일의 경로가 /var/log/mysql/mysql.log라고 생각하지만 열 수 없습니다. 어떻게해야합니까?
Arjun

2
어떻게 내가 자신을 루트로 만들고, 나는 메신저 소유자라고 생각하고, 서버를 설치하고, 암호를 설정하므로 소유자가되어야하며 여전히 잠겨 있습니다. 어떻게 열 수 있습니까?
Arjun

1
나는이 디렉토리에 cd를 강요했다. (나중에 삭제 한 루트 사용자를 만들어야했다.)이 파일을 볼 때 파일이 암호화되었다고 생각했다. 그래서 좋은 방법은 아니라고 생각한다.
라인

사용 sudo -sMySQL의 폴더로 이동을 시도하십시오.
Rashedul Islam

MySQL 매뉴얼은 Windows에 그러한 디렉토리가없는 방식으로 수많은 불일치로 채워져 있습니다.
user3338098

3

loyola 의 답변 을 보완하기 위해 MySQL 5.1부터는 log_slow_queries더 이상 사용되지 않으며 다음과 같이 대체됩니다.slow-query-log

사용 log_slow_queries하면 service mysql restart또는 service mysql start실패 할 수 있습니다


1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory

7
stackoverflow에 오신 것을 환영합니다. 답변의 코드가 OP의 질문과 어떻게 관련되는지에 대한 자세한 설명을 고려하십시오. 또한 올바른 형식을 사용하려면 코드를 4 칸 들여 쓰기해야합니다.
Politank-Z

1

위의 답변 외에도 conf 파일을 수동으로 편집하는 대신 옵션 로깅을 위해 명령 행 매개 변수를 mysqld 프로세스에 전달할 수 있습니다. 예를 들어, 일반 로깅을 사용하고 파일을 지정하려면 다음을 수행하십시오.

mysqld --general-log --general-log-file=/var/log/mysql.general.log

위의 다른 답변을 확인 mysqld --help --verbose하면 conf 파일의 값이 표시됩니다 (따라서 명령 행 옵션 general-log로 실행하면 FALSE 임). 반면 mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log:

general_log     ON
general_log_file        /var/log/mysql.general.log

오류 로그에 약간 더 간단한 구문을 사용하십시오.

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.