일반적으로 성숙한 소프트웨어에는 자체 로그 파일이 있습니다. 이러한 로그를 사용하면 문제를 빠르게 찾을 수 있습니다. MySQL에서는 로그를 다음과 같은 카테고리로 분류합니다.
SQL의 실행 시간이 설정된 값을 초과하면
오류 로그가 기록됩니다. 중지되거나 실행되면 오류 로그
바이너리 로그에 기록됩니다. 이 로그는 데이터베이스 데이터를 변경할 때 SQL 문을 기록합니다. 이를 통해 MySQL 데이터
쿼리 로그를 복원할 수 있습니다. 쿼리 SQL이 기록됩니다.
오늘은 느린 쿼리, 오류 로그, 쿼리 로그, 바이너리 로그 파일에 대해 나중에 새 글에서 자세히 설명하겠습니다.
오류 로그
오류 로그에는 Mysql이 시작되고 중지될 때 발생하는 문제도 기록됩니다. 'log_err%'와 같은 표시 변수를 사용하여 오류 로그 파일의 위치를 볼 수 있습니다.
mysql> show variables like 'log_err%'; +---------------------+-------------------------------+ | Variable_name | Value | +---------------------+-------------------------------+ | log_error | ./iZbp171edtq2kx5iy0xufeZ.err | | log_error_verbosity | 3 | +---------------------+-------------------------------+ 2 rows in set (0.01 sec)
오류 로그는 기본적으로 파일 이름으로 호스트 이름을 사용하고 접미사로 err을 사용하며 mysql 디렉토리 아래의 /var 디렉토리에 저장됩니다. 수정하고 싶다면 구성 파일의 log_error 항목을 수정하면 됩니다. 상대 경로 또는 절대 경로를 사용할 수 있으며, 상대 경로를 사용하면 오류 로그 파일 이름만 수정할 수 있고, 절대 경로를 사용하면 오류 로그가 저장되는 위치를 수정할 수 있습니다.
오류 로그를 보는 것도 매우 간단합니다. cat이나 vim을 사용하면 됩니다.
일반 쿼리 로그
일반 쿼리 로그는 사용자의 모든 작업을 기록하기 때문에 일반적으로 공간을 많이 차지하고 일상적인 작업 및 유지 관리 중에는 일반적으로 켜지지 않으며 기본적으로 로그가 꺼져 있습니다. 이를 활성화하려면 구성 파일에 로그 옵션을 추가하면 됩니다.
Slow Query Log
Slow Query는 SQL 문제를 해결하는 데 매우 유용한 도구입니다. 많은 경우 시스템이 제대로 실행되지 않는 원인은 SQL입니다. 작성자는 이전에 매우 복잡한 쿼리 문을 사용하여 이 실수를 저질렀으며 시스템은 오래되자마자 502를 얻었습니다. 얼마 전 회사의 이전 프로젝트에도 해당 문제가 있다는 것을 발견했습니다. 해당 프로젝트에서는 데이터 양이 일정 수준에 도달하면 느린 쿼리가 많이 나타나고 전체 시스템의 CPU가 가득 찼습니다. 따라서 SQL 문제를 찾기 위해서는 느린 쿼리 로그를 자주 확인해야 합니다.
느린 쿼리 구성 항목
slow-query-log={0|off|1|on} 느린 쿼리 로그 기능 활성화 여부
slow-query-time=10 밸브 설정 값, 단위는 초이며 부동 소수점 숫자를 지원합니다. SQL 실행 시간이 이 값을 초과하면 느린 쿼리 로그에 기록됩니다. 0으로 설정하면 모든 쿼리가 기록됩니다.
slow_query_log_file=/mydata/data/hostname-slow.log 느린 쿼리 로그의 위치 및 파일 이름
log_queries_not_using_indexes=OFF 이 항목은 쿼리를 기록하지 않는 쿼리를 나타냅니다. 인덱스를 사용하면 느린 쿼리 로그에도 기록됩니다.
Case
이제 mysql 느린 쿼리 로그를 열고 시간을 0으로 설정하여 모든 SQL을 기록합니다. 그럼 느린 쿼리 로그가 어떤 모습인지 살펴보겠습니다.
Tcp port: 3306 Unix socket: /tmp/mysql.sock Time Id Command Argument # Time: 2020-05-31T12:00:01.895700Z # User@Host: blog[blog] @ localhost [] Id: 3 # Query_time: 0.000170 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 use blog; SET timestamp=1590926401; SET NAMES utf8mb4; # Time: 2020-05-31T12:00:01.902684Z # User@Host: blog[blog] @ localhost [] Id: 3 # Query_time: 0.006914 Lock_time: 0.006529 Rows_sent: 0 Rows_examined: 120 SET timestamp=1590926401; SELECT * FROM knowledge WHERE is_delete=0 AND star < 5 AND show_time <= 1590854400 ORDER BY show_time ASC LIMIT 1;
주로 Query_time 라인을 살펴봅니다
Query_time: 쿼리 시간
Lock_time: 테이블 잠금 시간
Rows_sent: 가져온 데이터 행
Rows_examined: 스캔된 데이터 행
위 내용은 MySQL 운영 및 유지보수 로그 관리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!