Este tópico descreve como obter logs binários remotamente de uma instância Alibaba Cloud RDS for MySQL e analisá-los com o utilitário mysqlbinlog.
Antes de executar operações de risco, como modificar configurações ou dados da instância, garanta que ela tenha tolerância a desastres e a falhas para proteger seus dados.
Se você for alterar configurações ou dados de uma instância (ECS ou RDS, por exemplo), crie um snapshot ou ative o backup de logs da instância RDS antes de prosseguir.
Caso tenha concedido permissões ou enviado informações sensíveis (como nomes de usuário e senhas) na plataforma Alibaba Cloud, altere essas informações imediatamente.
Obter logs binários
Método 1: Baixar pelo console do RDS
Instâncias com discos cloud: após ativar o recurso de backup de logs (habilitado por padrão), os logs locais (logs binários) são enviados ou copiados em tempo real para um espaço de armazenamento de backup, formando backups de logs. Baixe o backup de logs correspondente ao momento desejado. Para mais informações, consulte Download from cloud disk instances.
Instâncias com disco local de alto desempenho: para mais informações, consulte Download from high-performance local disk instances.
Para saber como ativar o backup de logs, consulte Back up an Alibaba Cloud RDS for MySQL instance.
Método 2: Obter logs binários remotamente
-
Connect to an Alibaba Cloud RDS for MySQL instance.
ImportanteA versão do cliente MySQL deve corresponder à versão da instância RDS.
-
Execute a instrução
SHOW BINARY LOGS;para visualizar os nomes dos arquivos de log binário. Anote o nome do arquivo necessário, comomysql-bin.xxx, na colunaLog_name.SHOW BINARY LOGS;A saída será semelhante a esta:
mysql> SHOW BINARY LOGS; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000022 | 406039 | | mysql-bin.000023 | 71497 | +------------------+-----------+ 2 rows in set (0.01 sec) -
Use o nome do arquivo obtido na etapa anterior para buscar o log binário remotamente e salvá-lo localmente.
-
Execute o comando abaixo para sair da CLI do MySQL e retornar ao sistema operacional:
exit; -
Execute o seguinte comando para obter o log binário remotamente e salvá-lo na sua máquina local:
mysqlbinlog -u<$User> -p<$Password> -h<$Host> --read-from-remote-server --raw <mysql-bin.XXX>A tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
-u<$User>Nome de usuário para conexão ao servidor MySQL.
-p<$Password>Senha para conexão ao servidor MySQL.
-h<$Host>Endpoint da instância Alibaba Cloud RDS. Para saber como localizar o endpoint, consulte View the endpoints and port numbers of an Alibaba Cloud RDS for MySQL instance.
--read-from-remote-serverConecta ao servidor MySQL remoto especificado para obter o log binário.
--rawQuando usado com
--read-from-remote-server, faz com que omysqlbinloggrave o log binário em um arquivo local mantendo seu formato original.<mysql-bin.XXX>Nome do arquivo de log binário a ser obtido, conforme identificado na etapa 2.
-
Visualizar arquivos de log binário com mysqlbinlog
Execute o comando mysqlbinlog abaixo para visualizar o conteúdo de um arquivo de log binário.
A versão do cliente MySQL deve corresponder à versão da instância RDS.
mysqlbinlog -vv --base64-output=decode-rows <mysql-bin.XXX> | more
Para salvar o conteúdo analisado para consulta posterior, direcione a saída para um arquivo.
mysqlbinlog -vv --base64-output=decode-rows <mysql-bin.XXX> > [$File_Name]
A tabela a seguir descreve os parâmetros.
|
Parâmetro |
Descrição |
|
|
Exibe saída detalhada, incluindo o conteúdo completo de cada evento analisado. |
|
|
Imprime eventos de linha do log binário em formato decodificado. |
|
|
Nome do arquivo de log binário a ser analisado. Substitua |
|
|
Direciona a saída para o comando |
|
|
Arquivo local onde o conteúdo analisado será gravado. |
Para mais detalhes sobre a análise de logs binários, consulte a documentação oficial MySQL documentation.
A saída será semelhante a esta:
[root@iZbp****** ~]# mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000022 | more
# The proper term is pseudo_replica_mode, but we use this compatibility alias
# to make the statement usable on server versions 8.0.24 and older.
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#230911 9:27:28 server id 26718053 end_log_pos 123 CRC32 0xa231cb44 Start: binlog v 4, server v 5.7.42-log created 230911 9:27:28
# at 123
#230911 9:27:28 server id 26718053 end_log_pos 194 CRC32 0x078b6dc1 Previous-GTIDs
# a63b4ed1-4c86-11ee-9029-00163e157053:1-27339
# at 194
#230911 9:27:32 server id 26718053 end_log_pos 259 CRC32 0x59b848c3 GTID last_committed=0 sequence_number=1 rbr_only=yes original_committed_ti
mestamp=0 immediate_commit_timestamp=0 transaction_length=0
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# original_commit_timestamp=0 (1970-01-01 08:00:00.000000 CST)
# immediate_commit_timestamp=0 (1970-01-01 08:00:00.000000 CST)
/*!80001 SET @@session.original_commit_timestamp=0*//*!*/;
/*!80014 SET @@session.original_server_version=0*//*!*/;
/*!80014 SET @@session.immediate_server_version=0*//*!*/;
SET @@SESSION.GTID_NEXT= 'a63b4ed1-4c86-11ee-9029-00163e157053:27340'/*!*/;
# at 259
#230911 9:27:32 server id 26718053 end_log_pos 327 CRC32 0xc0dddaec Query thread_id=16849 exec_time=0 error_code=0
SET TIMESTAMP=1694395652/*!*/;
SET @@session.pseudo_thread_id=16849/*!*/;
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 utf8mb3 *//*!*/;
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
Perguntas frequentes
Esta seção aborda problemas comuns ao utilizar o utilitário mysqlbinlog.
-
Ao receber o erro abaixo, verifique a versão do utilitário
mysqlbinlog. Esse problema, que pode ocorrer na versão 3.3, foi corrigido na versão 3.4. Para resolvê-lo, utilize uma versão mais recente domysqlbinlog.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. -
Se o parâmetro
--base64-output=decode-rowsnão for especificado ao executar omysqlbinlog, a saída permanecerá codificada.
-
Caso encontre este erro, verifique se o arquivo de configuração
my.cnfcontém o campodefault-character-set=utf8mb4. Se estiver presente, adicione o parâmetro--no-defaultsao comando para corrigir o problema. Exemplo:mysqlbinlog --no-defaults -u[$User] -p[$Password] -h[$Host] --read-from-remote-server mysql-bin.XXX > [$File_Name].mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8mb4' -
Se os carimbos de data/hora no log analisado estiverem incorretos, confirme se o fuso horário do ambiente local corresponde ao fuso horário do banco de dados.
Os logs binários do MySQL armazenam carimbos de data/hora no formato Unix time, sem informações de fuso horário. O comando
mysqlbinlogconverte esses valores usando o fuso horário local do sistema onde é executado. Uma divergência de fuso horário entre o ambiente cliente e o servidor de banco de dados resultará em carimbos de data/hora incorretos na saída.
Aplicável a
Alibaba Cloud RDS for MySQL