Use o mysqlbinlog para baixar remotamente arquivos de log binário de um cluster PolarDB for MySQL e analisá-los localmente para auditoria de dados, recuperação point-in-time ou solução de problemas de replicação.
Pré-requisitos
Antes de começar, verifique se você tem:
Ativado o log binário no cluster PolarDB for MySQL. O log binário vem desativado por padrão. Sem ele, o comando
SHOW BINARY LOGS;retornaYou are not using binary logging. Ativar ou desativar o log binário reinicia automaticamente o cluster. Realize essa alteração em horários de baixa demanda e garanta que suas aplicações consigam se reconectar automaticamente.Um cliente MySQL instalado no servidor local.
O endpoint do cluster (privado ou público). Consulte Gerencie os endpoints de um cluster.
Uma conta de banco de dados para o cluster PolarDB for MySQL. Consulte Crie e gerencie uma conta de banco de dados.
Como funciona
O nó que fornece os logs binários depende do endpoint ao qual você se conecta:
|
Método de conexão |
Origem dos logs binários |
|
Endpoint primário, endpoint de cluster padrão ou endpoint de cluster personalizado associado ao nó primário |
Nó primário |
|
Endpoint de cluster personalizado associado apenas a nós somente leitura |
Um dos nós somente leitura |
Para baixar logs binários de um nó somente leitura, é necessário atender aos seguintes requisitos:
PolarDB for MySQL 8.0, versão de revisão 8.0.1.1.12 ou posterior
PolarDB for MySQL 5.7, versão de revisão 5.7.1.0.12 ou posterior
Se a versão não atender ao requisito, o mysqlbinlog retornará Only allow to dump binary log file on primary instance. Consulte Atualização de versão secundária para atualizar.
Baixe os arquivos de log binário
-
Conecte-se ao cluster PolarDB pelo cliente MySQL. Consulte Conexão com o banco de dados.
root@xxx:~# mysql -h xxx-polardb.rwlb.rds.aliyuncs.com -P3306 -utest_api -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is xxx Server version: 8.0.13 Source distribution Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> -
Liste os arquivos de log binário disponíveis:
SHOW BINARY LOGS;A saída lista o nome e o tamanho de cada arquivo de log:
+------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000005 | 2639 | +------------------+-----------+ 1 row in set (0.00 sec)Anote o valor de
Log_namepara usar na próxima etapa. -
Saia do cliente MySQL:
exit -
Execute o mysqlbinlog para baixar o arquivo de log binário no servidor local. Formato do comando:
Parâmetros:
Parâmetro
Descrição
--read-from-remote-serverObrigatório. Conecta-se ao cluster como cliente de replicação para transmitir logs binários remotamente.
--host/-hEndpoint privado ou público do cluster. Use um endpoint privado se o cluster e o servidor estiverem na mesma região e Virtual Private Cloud (VPC); caso contrário, use um endpoint público. Se o endpoint utilizar uma porta diferente da padrão, adicione o número da porta após o endpoint.
--user/-uNome da conta de banco de dados do cluster PolarDB for MySQL.
--password/-pSenha da conta. Omita o valor para digitá-la interativamente após executar o comando.
--rawSalva o log binário no formato binário original, sem convertê-lo para texto.
mysql-bin.<log-number>Nome do arquivo de log binário obtido no campo
Log_nameda etapa 2.mysqlbinlog -u<Username> -p<Password> -h<Endpoint> --read-from-remote-server --raw mysql-bin.******Exemplo:
mysqlbinlog -utest_api -p -htest-polardb.rwlb.rds.aliyuncs.com --read-from-remote-server --raw mysql-bin.000005mysql> exit Bye root@xxx:~# mysqlbinlog -utest_api -p -hxxx-polardb.rwlb.rds.aliyuncs.com --read-from-remote-server --raw mysql-bin.000005 Enter password: root@xxx:~#
Visualize e analise os arquivos de log binário
Execute o mysqlbinlog no arquivo baixado para decodificar e visualizar o conteúdo:
mysqlbinlog -vv --base64-output=decode-rows mysql-bin.<log-number> | more
-vv: exibe instruções SQL detalhadas e alterações no nível de linha.--base64-output=decode-rows: decodifica eventos de linha codificados em base64 para SQL legível.
A saída mostra o conteúdo decodificado de cada evento no arquivo de log binário:
[root@iZ ~]# mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000110 | more
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#160217 23:04:37 server id 2802943055 end_log_pos 107 Start: binlog v 4, server v 5.5.18.1-log created 160217 23:04:37
# at 107
#160217 23:04:38 server id 2802943055 end_log_pos 171 Query thread id=584632 exec time=0 error code=0
SET TIMESTAMP=1455721478/*!*/;
SET @@session.pseudo_thread_id=584632/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=2097152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 171
Use a mesma versão do MySQL que a versão do mecanismo de banco de dados do cluster PolarDB para evitar erros de análise.
Para obter a sintaxe completa e as opções do mysqlbinlog, consulte a documentação do MySQL.
Perguntas frequentes
Por que SHOW BINARY LOGS retorna "You are not using binary logging"?
O log binário está desativado por padrão. Ative o log binário no cluster e tente novamente.
Ativar ou desativar o log binário reinicia automaticamente o cluster.
Por que o mysqlbinlog falha com erro de sanity check ou checksum?
ERROR: Error in Log_event::read_log_event(): 'Sanity check failed', data_len: 151, event_type: 35
ERROR: Could not read entry at offset 120: Error in log format or read error.
ERROR: Got error reading packet from server: 'Slave can not handle replication events with the checksum that master is configured to log;
A versão do mysqlbinlog está muito antiga. Atualize para uma versão mais recente. Por exemplo, se você estiver na V3.3, atualize para a V3.4.
Por que o mysqlbinlog falha com "Lost connection to MySQL server"?
ERROR: Failed on connect: Lost connection to MySQL server at 'reading initial communication packet', system error: 104
Verifique os itens a seguir:
Conectividade de rede: confirme se o servidor consegue alcançar o endpoint do cluster.
Lista de permissões de IP: garanta que o endereço IP do servidor esteja adicionado à lista de permissões do cluster. Consulte Configure uma lista de permissões de IP.
Configurações do banco de dados: verifique se o servidor MySQL local permite conexões com bancos de dados e confirme se você consegue acessá-los com sucesso.
Por que o conteúdo dos arquivos de log binário não está decodificado?
Ao executar o mysqlbinlog sem --base64-output=decode-rows, os eventos de linha aparecem como strings base64 brutas.
O exemplo abaixo mostra uma saída de log binário não decodificada quando --base64-output=decode-rows não é utilizado. As instruções BINLOG contêm dados codificados em base64 que não foram analisados:
[root@iz ~]# mysqlbinlog -vv mysql-bin.000110 | more
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#160217 23:04:37 server id 2802943055 end_log_pos 107 Start: binlog v 4, server v 5.5.18.1-log created 160217 23:04:37
BINLOG '
BYzEVg9PhBGnZwAAAGsAAAAAAAAQANS41LjE4LjEtbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAAA==
'/*!*/;
# at 107
#160217 23:04:38 server id 2802943055 end_log_pos 171 Query thread_id=584632 exec_time=0 error_code=0
Sempre inclua --base64-output=decode-rows ao visualizar arquivos de log binário.
Por que "Only allow to dump binary log file on primary instance" aparece ao conectar-se a um nó somente leitura?
A versão do cluster não atende ao requisito mínimo para acesso a logs binários em nós somente leitura. Atualize para PolarDB for MySQL 8.0 revisão 8.0.1.1.12 ou posterior, ou PolarDB for MySQL 5.7 revisão 5.7.1.0.12 ou posterior. Consulte Atualização de versão secundária.
Por que os logs binários de um nó somente leitura às vezes estão atrasados em relação ao nó primário?
O nó primário replica arquivos de log binário para nós somente leitura de forma assíncrona. Se ocorrer latência de sincronização, os nós somente leitura podem ainda não ter os arquivos de log gravados mais recentemente. Esse atraso costuma ser breve quando o volume de dados é pequeno.
Por que um arquivo de log binário expirado não é excluído após o período de retenção binlog_expire_logs_seconds?
Se uma thread de um nó somente leitura estiver lendo ativamente o arquivo no momento da expiração, o sistema o mantém até que a leitura seja concluída. Após o nó primário gravar um novo arquivo de log binário, o sistema verifica arquivos expirados que não estão mais sendo lidos e os exclui.