MySQL case combat-gerenciamento de registro de banco de dados MySQL

Prefácio

O serviço MySQL também tem muitos tipos de logs. Os logs estão envolvidos no backup de dados do banco de dados, recuperação de dados, solução de problemas e ajuste do servidor. A seguir, falaremos sobre o gerenciamento de log do MySQL em detalhes

Este ambiente é baseado no sistema Centos 7.8 para construir o MySQL-5.7.14 para
construção específica, consulte a construção do ambiente MySQL-5.7.14


Log do MySQL

Arquivo de log Tipo de informação no arquivo de log
Log de erros Registre os problemas que ocorrem ao iniciar, executar ou parar
Log de consulta Registre conexões de clientes estabelecidas e instruções executadas
Log binário Registre todas as declarações de dados de alteração. Usado principalmente para replicação e recuperação point-in-time
Log lento Registrar todas as consultas cujo tempo de execução exceda log_query_time segundos ou consultas que não devem usar índices
Log de transações Registre os registros gerados durante a execução de mecanismos de armazenamento compatíveis, como InnoDB

1. Registro de erros

O log de erros registra principalmente os seguintes tipos de logs

  • Informações durante a inicialização e desligamento do servidor
  • Mensagem de erro durante a operação do servidor
  • Informações geradas pelo programador de eventos por um tempo
  • Informações geradas quando o processo do servidor escravo é iniciado no servidor escravo

Gerenciar registros de erros

O log de erros do MySQL é armazenado no diretório datadir (diretório de dados) por padrão,
mas também podemos definir manualmente o caminho de armazenamento do arquivo de log

1. Caminho do caminho de armazenamento padrão do log

[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. O caminho de armazenamento do log não foi especificado

[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. Defina o caminho de armazenamento

[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)

Nota: o log de erros do MySQL é armazenado no diretório de dados

2. Log de consulta

Log de consulta: registra conexões de clientes estabelecidas e instruções executadas

Abrir log de consulta

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

Ver o status do registro

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();

Ver registros de log
Insira a descrição da imagem aqui

Três, log de consulta lenta

Registro lento: registra todas as consultas cujo tempo de execução excede log_query_time segundos ou consultas que não devem usar o índice
Função: usado principalmente para ajuste do servidor

Definir início lento do registro e tempo de consulta

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)

Quarto, o log binário

Qual é o log binário?

  • O log binário contém todas as instruções que têm dados atualizados ou têm dados potencialmente atualizados (por exemplo, um DELETE que não corresponde a nenhuma linha)
  • As declarações são armazenadas na forma de "eventos", que descrevem as alterações de dados. O log binário também contém informações sobre o tempo de execução de cada instrução que atualiza o banco de dados. Não contém instruções que não modificam nenhum dado.

O papel do log binário?

  • O objetivo principal do log binário é atualizar o banco de dados o máximo possível durante a recuperação (recuperação pontual) quando o banco de dados está com defeito, porque o log binário contém todas as atualizações realizadas após o backup
  • O log binário também é usado para registrar todas as instruções que serão enviadas para o servidor escravo no servidor de replicação mestre

No ambiente de produção, geralmente adotamos: executar instruções e registrar os resultados da execução, registrar os logs binários

Abra log_bin

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

Ver log_bin status de abertura

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)

Exibir conteúdo 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*/;

Principal: a versão superior do MySQL, a instrução em log_bin foi criptografada e precisa ser decodificada para visualizar
Quando log_bin está habilitado, o número do server_id precisa ser especificado, e este valor é único no cluster de servidor MySQL

Excluir 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)

Observação: os arquivos de log binários não podem ser excluídos diretamente. Se você usar comandos como rm para excluir os arquivos de log diretamente, o banco de dados pode falhar.
1. Excluir com comando de purga 2. Excluir
com comando de redefinição

Acho que você gosta

Origin blog.csdn.net/XY0918ZWQ/article/details/113364127
Recomendado
Clasificación