Mostrar instruções sql do mysql binlog (GTID)
-
26-09-2020 - |
Pergunta
Eu tenho binlogs mysql para replicação através do GTID.
Estou tentando mostrar instruções de atualização/inserção executadas como esta:
mysqlbinlog --base64-output=DECODE-ROWS mysql-bin.000024
Mas tudo que vejo é algo assim, sem vestígios de atualização ou inserção de stmt:
SET TIMESTAMP=1431681617/*!*/;
BEGIN
/*!*/;
# at 746987321
# at 746987392
# at 746987484
#150515 11:20:17 server id 1 end_log_pos 746987515 CRC32 0xeb874754 Xid = 997501767
COMMIT/*!*/;
# at 746987515
#150515 11:20:22 server id 1 end_log_pos 746987563 CRC32 0xc5ece64a GTID [commit=yes]
SET @@SESSION.GTID_NEXT= 'a4ade293-c63a-11e4-94cf-005056944a56:2059057'/*!*/;
# at 746987563
#150515 11:20:22 server id 1 end_log_pos 746987650 CRC32 0x92296355 Query thread_id=71622 exec_time=0 error_code=0
Não tenho certeza sobre o formato/configuração da replicação GTID e onde procurá-la...
Solução
Parece que a opção --verbose deve ser adicionada:
mysqlbinlog --base64-output=AUTO --verbose mysql-bin.000005
No resultado você vê:
### UPDATE `customer`
### WHERE
### @1=388442
### @2=382023
### @3='2015:05:30'
### @4='2015:06:02'
### @5=3
### @6=1
### @7=0
@x são as colunas da tabela em sua ordem
Outras dicas
Não acho que GTID seja seu problema.
Você provavelmente está usando registro binário baseado em linha
Para verificar isso, execute um dos seguintes:
SELECT @@global.binlog_format;
SHOW GLOBAL VARIABLES LIKE 'binlog_format';
SELECT variable_value FROM information_schema.global_variables
WHERE variable_name='binlog_format';
Você verá ROW
ou MIXED
.A única maneira de ver o SQL, você teria que definir binlog_formato para STATEMENT
em my.cnf
e reinicie o mysqld porque a documentação do MySQL em Replicação com identificadores de transações globais diz no primeiro parágrafo:
Você pode usar replicação baseada em instruções ou em linhas com GTIDs (consulte a Seção 17.1.2, “Formatos de replicação”);entretanto, para obter melhores resultados, recomendamos usar o formato baseado em linha.
No entanto, você não verá o SQL real com os logs binários fornecidos.
Experimente esta ferramenta binlog2sql, ele analisa o log bin para atualizar/inserir instruções.
Sua descrição de uso está em chinês, mas acredito que você pode entender com o comando de exemplo.
eu prefiro usar
mysqlbinlog -v --base64-output=DECODE-ROWS /files/
porque:
- "Se nenhuma opção --base64-output for fornecida, o efeito será o mesmo que --base64-output=AUTO"
- "A combinação de --base64-output=DECODE-ROWS e --verbose fornece uma maneira conveniente de ver eventos de linha apenas como instruções SQL" (suprime as instruções BINLOG)
"Especifique --verbose ou -v duas vezes para exibir também os tipos de dados e alguns metadados para cada coluna."
Fonte das citações:homem mysqlbinlog