MySQL 사례 전투 -MySQL 데이터베이스 로그 관리

머리말

또한 MySQL 서비스에는 다양한 유형의 로그가 있습니다. 로그는 데이터베이스 데이터 백업, 데이터 복구, 문제 해결 및 서버 튜닝과 관련됩니다. 다음으로 MySQL 로그 관리에 대해 자세히 설명합니다.

이 환경은 Centos 7.8 시스템을 기반으로
특정 구성 을 위해 MySQL-5.7.14를 빌드 합니다. MySQL-5.7.14 환경 구성을 참조하십시오.


MySQL 로그

로그 파일 로그 파일의 정보 유형
오류 기록 시작, 실행 또는 중지 할 때 발생하는 문제 기록
쿼리 로그 설정된 클라이언트 연결 및 실행 된 명령문 기록
바이너리 로그 모든 변경 데이터 설명을 기록합니다. 주로 복제 및 특정 시점 복구에 사용
느린 로그 실행 시간이 log_query_time 초를 초과하는 모든 쿼리 또는 인덱스를 사용하지 않아야하는 쿼리를 기록합니다.
트랜잭션 로그 InnoDB와 같은 지원되는 스토리지 엔진 실행 중에 생성 된 로그 기록

1. 오류 로그

오류 로그는 주로 다음 유형의 로그를 기록합니다.

  • 서버 시작 및 종료 중 정보
  • 서버 작동 중 오류 메시지
  • 일정 시간 동안 이벤트 스케줄러에서 생성 된 정보
  • 슬레이브 서버에서 슬레이브 서버 프로세스 시작시 생성되는 정보

오류 로그 관리

MySQL 오류 로그는 기본적으로 datadir (데이터 디렉터리) 디렉터리에 저장
되지만 로그 파일 저장 경로를 수동으로 설정할 수도 있습니다.

1. 로그 기본 저장 경로 경로

[root@mysql-yum ~]# vim /etc/my.cnf
log-error=/var/log/mysqld.log
[root@mysql-yum ~]# systemctl restart mysqld
mysql> show global variables like '%log_error%';
+---------------------+---------------------+
| Variable_name       | Value               |
+---------------------+---------------------+
| binlog_error_action | ABORT_SERVER        |
| log_error           | /var/log/mysqld.log |
| log_error_verbosity | 3                   |
+---------------------+---------------------+
3 rows in set (0.00 sec)

2. 로그 저장 경로가 지정되지 않았습니다.

[root@mysql-yum ~]# vim /etc/my.cnf
log-error
[root@mysql-yum ~]# systemctl restart mysqld
mysql> show global variables like '%log_error%';
+---------------------+----------------------------+
| Variable_name       | Value                      |
+---------------------+----------------------------+
| binlog_error_action | ABORT_SERVER               |
| log_error           | /var/run/mysqld/mysqld.err |
| log_error_verbosity | 3                          |
+---------------------+----------------------------+
3 rows in set (0.00 sec)

3. 저장 경로 설정

[root@mysql-yum ~]# vim /etc/my.cn
log-error=mysql-yum
[root@mysql-yum ~]# systemctl restart mysqld
mysql> show global variables like '%log_error%';
+---------------------+-----------------+
| Variable_name       | Value           |
+---------------------+-----------------+
| binlog_error_action | ABORT_SERVER    |
| log_error           | ./mysql-yum.err |
| log_error_verbosity | 3               |
+---------------------+-----------------+
3 rows in set (0.00 sec)

참고 : MySQL 오류 로그는 데이터 디렉토리에 저장됩니다.

2. 쿼리 로그

쿼리 로그 : 설정된 클라이언트 연결 및 실행 된 문 기록

쿼리 로그 열기

[root@mysql-yum ~]# vim /etc/my.cnf
general_log=on
[root@mysql-yum ~]# systemctl restart mysqld

로그 상태보기

mysql> show global variables like '%general_log%';
+------------------+------------------------------+
| Variable_name    | Value                        |
+------------------+------------------------------+
| general_log      | ON                           |
| general_log_file | /var/lib/mysql/mysql-yum.log |
+------------------+------------------------------+
2 rows in set (0.00 sec)

mysql> show global variables like '%log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)

# 执行查询语句
mysql> show databases;
mysql> select database();

로그 기록보기
여기에 사진 설명 삽입

세, 느린 쿼리 로그

느린 로그 : 실행 시간이 log_query_time 초를 초과하는 모든 쿼리 또는 인덱스를 사용하지 않아야하는 쿼리를 기록합니다
. 기능 : 주로 서버 튜닝에 사용

느린 로그 시작 및 쿼리 시간 설정

mysql> set global slow_query_log=on;
Query OK, 0 rows affected (0.22 sec)

mysql> set global long_query_time=3;
Query OK, 0 rows affected (0.00 sec)


# 查看日志设定
mysql> show global variables like '%slow_query_log%';
+---------------------+-----------------------------------+
| Variable_name       | Value                             |
+---------------------+-----------------------------------+
| slow_query_log      | ON                                |
| slow_query_log_file | /var/lib/mysql/mysql-yum-slow.log |
+---------------------+-----------------------------------+
2 rows in set (0.00 sec)

mysql> show global variables like '%long_query_time%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 3.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

넷째, 바이너리 로그

바이너리 로그 란 무엇입니까?

  • 바이너리 로그에는 업데이트 된 데이터가 있거나 잠재적으로 업데이트 된 데이터가있는 모든 문이 포함됩니다 (예 : 어떤 행과도 일치하지 않는 DELETE).
  • 문은 데이터 변경을 설명하는 "이벤트"형식으로 저장됩니다. 바이너리 로그에는 데이터베이스를 업데이트하는 각 문의 실행 시간에 대한 정보도 포함됩니다. 데이터를 수정하지 않는 문은 포함되지 않습니다.

바이너리 로그의 역할?

  • 바이너리 로그의 주요 목적은 데이터베이스에 결함이있을 때 복구 (특정 시점 복구) 중에 데이터베이스를 최대한 업데이트하는 것입니다. 바이너리 로그에는 백업 후에 수행 된 모든 업데이트가 포함되기 때문입니다.
  • 바이너리 로그는 또한 마스터 복제 서버의 슬레이브 서버로 보낼 모든 명령문을 기록하는 데 사용됩니다.

프로덕션 환경에서 우리는 종종 다음을 채택합니다 : 명령문 실행 및 실행 결과 기록, 바이너리 로그 기록

log_bin 열기

[root@mysql-yum ~]# systemctl restart mysqld
log_bin=mysql-bin
server_id=10
[root@mysql-yum ~]# systemctl restart mysqld

log_bin 열기 상태보기

mysql> show global variables like '%log_bin%';
+---------------------------------+--------------------------------+
| Variable_name                   | Value                          |
+---------------------------------+--------------------------------+
| log_bin                         | ON                             |
| log_bin_basename                | /var/lib/mysql/mysql-bin       |
| log_bin_index                   | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF                            |
| log_bin_use_v1_row_events       | OFF                            |
+---------------------------------+--------------------------------+
5 rows in set (0.00 sec)

# 查看二进制日志文件
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       154 |
+------------------+-----------+
1 row in set (0.00 sec)

# 查看二进制日志文件内容
mysql> mysql> show binlog events in 'mysql-bin.000001';
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| mysql-bin.000001 |   4 | Format_desc    |        10 |         123 | Server ver: 5.7.14-log, Binlog ver: 4 |
| mysql-bin.000001 | 123 | Previous_gtids |        10 |         154 |                                       |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
2 rows in set (0.00 sec)

log_bin 내용보기

[root@mysql-yum ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#210129 11:06:37 server id 10  end_log_pos 123 CRC32 0x323c980c 	Start: binlog v 4, server v 5.7.14-log created 210129 11:06:37 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
vXsTYA8KAAAAdwAAAHsAAAABAAQANS43LjE0LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAC9exNgEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AQyYPDI=
'/*!*/;
# at 123
#210129 11:06:37 server id 10  end_log_pos 154 CRC32 0xb271a2b4 	Previous-GTIDs
# [empty]
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

Main : MySQL의 상위 버전, log_bin의 문이 암호화되었으며이를 보려면 디코딩해야합니다.
log_bin이 활성화되면 server_id 번호를 지정해야하며이 값은 MySQL 서버 클러스터에서 고유합니다.

log_bin 삭제

# 多西刷新log_bin
mysql> flush logs;
Query OK, 0 rows affected (0.00 sec)

# 查看所有的log_bin
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       201 |
| mysql-bin.000002 |       201 |
| mysql-bin.000003 |       201 |
| mysql-bin.000004 |       201 |
| mysql-bin.000005 |       154 |
+------------------+-----------+
5 rows in set (0.00 sec)


# 删除日志
---方法一:按照日志名字删除
mysql> purge binary logs to 'mysql-bin.000003';
Query OK, 0 rows affected (0.00 sec)

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000003 |       201 |
| mysql-bin.000004 |       201 |
| mysql-bin.000005 |       154 |
+------------------+-----------+
3 rows in set (0.00 sec)

---方法二:按照日志删除
mysql> purge binary logs before '2021-01-29 11:24:37';
Query OK, 0 rows affected (0.00 sec)

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000004 |       201 |
| mysql-bin.000005 |       154 |
+------------------+-----------+
2 rows in set (0.00 sec)

---方法三:删除所有日志,重新从第一编号开始,重新记录日志
mysql> reset master;
Query OK, 0 rows affected (0.00 sec)

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       154 |
+------------------+-----------+
1 row in set (0.01 sec)

참고 : 바이너리 로그 파일은 직접 삭제할 수 없습니다. rm과 같은 명령을 사용하여 로그 파일을 직접 삭제하면 데이터베이스가 충돌 할 수 있습니다.
1. 퍼지 명령으로 삭제 2.
리셋 명령으로 삭제

추천

출처blog.csdn.net/XY0918ZWQ/article/details/113364127