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...

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a dba.stackexchange
scroll top