Mysql의 오류 로그, binlog 로그, 쿼리 로그 및 느린 쿼리 로그 소개

黄舟
풀어 주다: 2017-03-01 14:05:41
원래의
1608명이 탐색했습니다.

머리말

데이터베이스 로그는 데이터베이스 관리자가 데이터베이스에서 발생한 다양한 이벤트를 추적하고 분석하는 데 도움이 되는 강력한 기반입니다. MySQL은 오류 로그와 binlog 로그(바이너리)를 제공합니다. 로그), 조사 로그, 느린 쿼리 로그. 여기서 나는 다음과 같은 질문에 답하려고 합니다. 각 로그의 목적은 무엇입니까? 이러한 로그를 제어하는 ​​방법은 무엇입니까? 이러한 로그에서 제공되는 정보를 어떻게 사용합니까?

오류 로그

1. 오류 로그 기능

오류 로그에는 MySQL이 시작되고 중지되는 시점과 서버가 실행되는 동안 발생하는 심각한 오류에 대한 정보가 기록됩니다. 오류로 인해 데이터베이스가 시작되지 않는 경우 예를 들어 mysql이 비정상적으로 시작되는 경우 먼저 이 로그를 확인할 수 있습니다. mysql에서는 오류 로그 로그(및 기타 로그)를 파일에 저장할 수 있을 뿐만 아니라 데이터 테이블에도 저장할 수 있다. 구현 방법에 대해서도 저자가 연구 중이다. .·

2. 에러 로그 관리 및 사용

1.구성

log-error=[file-name]을 구성하여(mysql 구성 파일에서) 전달했습니다. file_name이 지정되지 않은 경우 mysqld는 오류 로그 이름 host_name.err(host_name은 호스트 이름)을 사용합니다. 기본값은 다음과 같습니다. 로그 파일은 datadir 매개변수로 지정된 디렉터리(데이터가 저장되는 디렉터리)에 기록됩니다.

예를 들어 로컬에서 WampServer 통합 환경을 사용합니다.

로그 오류가 발생하는 경우 = D:/wamp/logs/mysql.log

아래와 같습니다


로그 오류를 주석 처리하면(#log-error=D:/wamp/logs/mysql.log ) , 서버를 다시 시작하면 datadir


2. 오류 로그 보기

오류 로그 형식: 시간 [오류 수준] 오류 메시지

mysql 구성 파일을 통해 에러 로그 위치를 찾는 것이 번거롭다면 클라이언트에서 명령어를 통해 에러 로그 위치를 확인할 수 있습니다

명령형 표현식 사용: 'log_error'와 같은 변수 표시;


다음은 mysql 시작 로그이다



바이너리 로그

1. 기능

바이너리 로그(binlog 로그라고도 함)는 모든 DDL(데이터 정의 언어) 문과 DML(데이터 조작 언어) 문을 기록하지만 데이터 쿼리 문은 포함하지 않습니다. , 데이터 변경 프로세스를 설명합니다. 이 로그의 두 가지 주요 기능은 데이터 복구와 데이터 복제입니다.



데이터 복구: MySQL 자체에는 데이터 백업 및 복구 기능이 있습니다. 예를 들어 매일 자정 12시에 데이터를 백업합니다. 어느 날 오후 13시에 데이터베이스에 오류가 발생하면 데이터베이스 콘텐츠가 손실됩니다. 이 문제는 바이너리 로그를 통해 해결할 수 있습니다. 해결 방법은 전날 자정 12시에 데이터 백업 파일을 먼저 데이터베이스에 복원한 후, 바이너리 로그를 이용하여 데이터베이스 를 전날 자정 12시부터 로 복원하는 것이다. 🎜>오늘 13시 정상영업합니다.

데이터 복제: MySQL은 마스터 서버와 슬레이브 서버 간의 데이터 복제 기능을 지원하며, 이 기능을 사용하여 데이터베이스의 중복 메커니즘을 구현하여 가용성을 보장합니다. 데이터베이스를 개선하고 데이터베이스 미덕 성능을 향상시킵니다. MySQL은 바이너리 로그를 통해 데이터 전송을 구현합니다. 마스터 서버의 바이너리 로그 내용은 각 슬레이브 서버로 전송되어 각 슬레이브 서버에서 실행되므로 마스터 서버와 슬레이브 서버 간의 데이터 일관성이 보장됩니다.

2. 바이너리 로그 제어 및 사용

활성화

기본적으로 mySQL은 바이너리 로그를 기록하지 않습니다. MySQL의 바이너리 로깅 기능을 활성화하려면 어떻게 해야 합니까?

MySQL 구성 파일을 통해 바이너리 로깅 기능을 시작하도록 MySQL을 제어할 수 있습니다. log-bin=[base_name] 매개변수를 수정하여 MySQL 바이너리 로그를 시작합니다. mySQL은 수정된 데이터베이스 내용 설명을 base_name-bin.0000x라는 로그 파일에 기록합니다. 여기서 bin은 바이너리를 나타내고 접미사 00000x는 바이너리 로그 파일이 시작될 때마다의 순서를 나타냅니다. MySQL에서는 로그 파일 순서가 자동으로 1씩 증가합니다. base_name이 정의되지 않은 경우 MySQL은 pid-file 매개 변수에 의해 설정된 값을 바이너리 로그 파일의 기본 이름으로 사용합니다.

예를 들어 로그 bin 파일 이름을 mybinlog로 지정하면 D:/wamp/bin/mysql에 저장됩니다. /mysql5 .6.17/data 디렉터리에서 바이너리 로그 파일 mybinlog.00000x를 생성합니다.


바이너리 로그 파일은 아래와 같습니다


'log_bin'과 같은 표시 변수를 사용하여 bin-log 로그가 활성화되어 있는지 확인하세요.



2. 보기

MySQL 바이너리 로그는 주로 MySQL 내부용이며 데이터베이스 관리자가 읽고 사용하는 것이 아닙니다. 따라서 바이너리 로그와 다른 로그의 중요한 차이점은 바이너리 로그입니다. 파일 형식은 텍스트 형식이 아니며 해당 내용을 메모장을 통해 직접 볼 수 없습니다. MySQL에서는 관리자 관리를 용이하게 하기 위해 바이너리 로그 내용을 볼 수 있는 mysqlbinlog 도구를 제공합니다.


예: mysqlbinlog D:wampbinmysqlmysql5.6.17datamybinlog.000003

실행 결과는 다음과 같습니다.


이제 bin 로그에 데이터베이스 업데이트 작업이 기록되는지 테스트해 보겠습니다.

예를 들어 데이터 테이블 t2에서 id2=2인 행의 id1을 5로 변경합니다. 그런 다음 바이너리 로그 파일을 쿼리하여 작업이 기록되었는지 확인합니다.


바이너리 파일에는 내가 데이터베이스를 수정한 작업이 기록되고, 쿼리문은 기록되지 않습니다.

3. 바이너리 로그 삭제

요즘에는 매일 생성되는 로그 양이 많아 상대적으로 바쁜 시스템의 경우 시간이 불명확하거나 전송되면 디스크 공간이 많이 낭비됩니다. 따라서 정기적으로 로그를 삭제하는 것은 DBA의 MYSQL 데이터베이스 유지 관리에 있어서 중요한 부분입니다.

1. Reset master 명령

을 통해 Reset master 명령을 실행하면 모든 binlog 로그가 삭제됩니다. 새 로그 파일 번호는 000001부터 시작됩니다.

2. 퍼지 마스터 로그를

base_name.xxxxxx'에 실행하여 'xxxxxx'를 삭제합니다. > '숫자 이전의 모든 로그입니다. 아래에서는 mybinlog.000003 이전의 모든 로그를 삭제합니다.

아래와 같습니다.



3. 'time' 명령 전에 마스터 로그 제거를 사용하여

실행합니다. 'time'은 'time' 이전의 모든 로그를 삭제한다는 의미입니다. 시간' . 예를 들어 2016-04-01 00:00:00 이전의 모든 로그를 삭제하려면 명령은 다음과 같습니다.

이전 마스터 로그 제거 '2016 -04-01 00:00:00';

4.expiration_logs_days 매개변수 설정

expiration_logs_days=# 매개변수를 설정하여 로그 만료 일수를 지정합니다. 지정된 일수가 지나면 로그가 자동으로 삭제됩니다. 방법. 예를 들어,expire_logs_day=3으로 설정하면 3일 후에 자동으로 삭제된다는 의미입니다.

4. 중요 바이너리 로그 매개변수 설명

max_binlog_size: 단일 바이너리 로그 파일의 최대값을 지정합니다. , 초과하는 경우 이 값은 접미사가 +1인 새 바이너리 로그 파일을 생성하고 이를 .index 파일에 기록합니다.

binlog_cache_size: 캐시 영역 크기

sync_binlog: 캐시에 여러 번 쓰지 않고 캐시가 디스크에 동기화됨을 나타냅니다. N이 1로 설정되면 바이너리 파일이 디스크에 동기적으로 기록된다는 의미입니다. MySQL의 기본 시스템 설정은 sync_binlog=0입니다. 이는 필수 디스크 새로 고침 명령이 수행되지 않음을 의미합니다. 이때 성능은 최고이지만 위험도 가장 큽니다. 시스템이 충돌하면 binlog_cache의 모든 binlog 정보가 손실되기 때문입니다. "1"로 설정하면 가장 안전한 설정이지만 성능 손실이 가장 큽니다. 1로 설정하면 시스템이 충돌하더라도 실제 데이터에 큰 영향을 주지 않고 binlog_cache에서 최대 하나의 완료되지 않은 트랜잭션이 손실되기 때문입니다.

binlog-do-db: 기록해야 하는 데이터베이스 날짜, 기본값은 비어 있습니다. 모든 라이브러리 로그가 바이너리 로그와 동기화되었음을 나타냅니다.

binlog-ignore-db: 데이터베이스를 무시해야 하는 일수

log-slave-update: 다음 경우에 구성해야 합니다. 마스터-슬레이브 데이터베이스 구축

binglog_format: 선택값에는 명령문(논리적 sql문 기록), 행(테이블 행 변경 기록), 혼합

5. 데이터 복구를 위해 바이너리 로그를 사용합니다

앞서 설명한 것처럼 데이터가 비정상적이어서 특정 시점의 데이터로 복원하려는 경우 바이너리 데이터만으로는 충분하지 않은 경우가 많습니다 또한 이 시점 이전에 백업된 데이터도 필요합니다.

효과를 쉽게 관찰하기 위해 데이터베이스를 백업했습니다. 이때 데이터 테이블 t1의 데이터는 다음과 같습니다.


이제부터는 데이터에 대해 업데이트나 삽입 작업 등 몇 가지 작업을 수행해야 합니다. t1 데이터는 아래와 같습니다



이때, 매우 안타까운 일이 발생하여 해커가 침입하여, 내 t1 테이블의 데이터가 모두 삭제되었는데, 해커가 삭제하기 전에 어떻게 데이터를 얻을 수 있나요?



1단계: 데이터를 복원해야 합니다. 백업한 데이터를 복원한 결과는



2단계: 데이터 백업 순간부터 해킹당하기 전 순간까지 모든 데이터 작업을 복원하려면 바이너리 로그 파일을 사용해야 합니다.

실행: mysqlbinlog D:wampbinmysqlmysql5.6.17datamybinlog.000004

바이너리 로그를 분석한 결과 '637' 라인에서 데이터가 해커의 공격을 받았으므로 필요한 것만 확인했습니다. 복원하려면 637행 이전의 모든 작업을 무시할 수 있습니다.


따라서 다음 명령을 실행하여 데이터를 복구할 수 있습니다.

mysqlbinlog D:wampbinmysqlmysql5.6.17datamybinlog.000004 --stop-pos=637|mysql -uroot -p**dequan


그럼 우리 t1 테이블의 데이터를 확인해 볼까요


마침내 완료되었지만 이는 데이터 복구를 용이하게 하려면 바이너리 로그를 활성화해야 할 뿐만 아니라 정기적으로 데이터.

바이너리 로그에 대한 추가 정보:

1. showbinarylogs명령 어떤 다른 바이너리 로그가 있습니까?


2. show binlog events

show binlog 이벤트로 기록된 이벤트를 기록할 수 있습니다. 기록된 모든 이벤트를 봅니다. 특정 바이너리 로그 기록 이벤트를 조회하려면 아래와 같이 끝에 '로그 이름'을 추가하면 됩니다.



쿼리 로그

1. 기능 설명

쿼리 로그에는 클라이언트의 모든 명령문이 기록됩니다. log=[file_name]을 통해 위치를 지정할 수 있습니다. 다른 로그와 마찬가지로 file_name 값을 지정하지 않으면 로그는 datadir이 있는 디렉터리에 기록됩니다. 일반적으로 켜지지 않으므로 여기서는 자세히 설명하지 않겠습니다.


Slow Query Log

기능 설명

Slow Query Log는 실행 시간이 long_query_time(단위:초)을 초과하는 모든 SQL 문 로그를 기록합니다. 테이블 잠금을 얻기 위해 대기한 시간은 실행 시간으로 계산되지 않습니다. log-slow-queries=[file_name] 옵션을 통해 느린 쿼리 로그 기능을 활성화할 수 있습니다. 이전 로그와 마찬가지로 file_name을 지정하지 않으면 로그 디렉터리는 datedir 디렉터리에 있고 기본 이름은 host_name-slow.log입니다.

2. 느린 쿼리 로그 읽기

느린 쿼리 열기 상태 쿼리


구성 파일에 다음 코드를 추가합니다. , 느린 쿼리 활성화

#느린 쿼리 활성화
slow_query_log=ON
slow_query_log_file=D:/wamp/logs/myslowquery.log
long_query_time=1.5


(어떤 곳에서는 느린 쿼리 로그를 log-slow-queries=[file_name]을 통해 지정한다고 하는데 시도해 보았는데, 여기서 mysql을 시작하면 오류가 발생합니다. 방식으로 시스템에서 win Operate를 사용 중일 수도 있고, 내 로컬 mysql이 WampServer 통합 환경을 사용하여 설치되었거나 사용된 버전이 다를 수도 있습니다.)

느린 쿼리 시간 설정을 확인하세요


느린 쿼리 시간을 수정하는 경우 set long_query_time=1.5;


을 사용할 수 있습니다. 효과를 쉽게 볼 수 있도록 느린 쿼리 시간 제한을 0.15로 변경한 다음 0.15를 초과하는 시간으로 SQL을 작성하고 마지막으로 로그를 확인하여 SQL 문이 기록되는지 확인하겠습니다.

느린 질의 시간을 설정하고 해당 SQL 문을 실행




위에서 총 3개의 SQL 문을 실행했습니다. 이제 느린 쿼리 로그를 살펴보겠습니다.


쿼리하는데 시간이 오래 걸리는 SQL 문만 기록합니다.

위는 Mysql의 에러 로그, binlog 로그, 쿼리 로그, 느린 쿼리 로그에 대한 소개입니다. .더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿