Pregunta

Tengo binlogs MySQL para la replicación a través de GTID.

Estoy tratando de mostrar las declaraciones de actualización / inserción ejecutadas como esta:

mysqlbinlog --base64-output=DECODE-ROWS mysql-bin.000024

Pero todo lo que veo es algo así, sin rastros de actualización o inserción 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

No estoy seguro de formato / configuración de la replicación GTID y dónde buscarlo ...

¿Fue útil?

Solución

Parece que se debe agregar la opción --verbosa:

mysqlbinlog  --base64-output=AUTO --verbose mysql-bin.000005 

En el resultado, ves:

### UPDATE `customer`
### WHERE
###   @1=388442
###   @2=382023
###   @3='2015:05:30'
###   @4='2015:06:02'
###   @5=3
###   @6=1
###   @7=0

@x son las columnas de la tabla en su orden

Otros consejos

No creo que GTID es su problema.

probablemente está usando el registro binario basado en filas

Para verificar esto, ejecute uno de los siguientes:

SELECT @@global.binlog_format;
SHOW GLOBAL VARIABLES LIKE 'binlog_format';
SELECT variable_value FROM information_schema.global_variables
WHERE variable_name='binlog_format';

Verás ROW o MIXED. La única forma de ver el SQL, tendría que configurar binlog_format a STATEMENT en my.cnf y reinicie MySQLD debido a la documentación MySQL en Replicación con identificadores de transacciones globales dice en el primer párrafo:

Puede usar una replicación basada en la declaración o basada en filas con GTID (consulte la Sección 17.1.2, "Formatos de replicación"); Sin embargo, para obtener mejores resultados, le recomendamos que utilice el formato basado en filas.

Sin embargo, no va a ver el SQL real con los registros binarios dados.

Pruebe esta herramienta binlog2sql , analice el registro de la papelera para actualizar / insertar declaraciones.
Su descripción de uso está en chino, pero creo que puede obtener el punto desde el comando de ejemplo.

Prefiero usar

mysqlbinlog -v --base64-output=DECODE-ROWS /files/

Porque:

  • "Si no se da la opción de salida, el efecto es el mismo que --Base64-OUTPUT= AUTO"
  • "La combinación de --Base64-OUTPUT= Decode-Filas y --verbose proporciona una forma conveniente de ver eventos de fila solo como afirmaciones de SQL" (Surpresa las declaraciones BinLog)

"Especifique --verboso o -v dos veces para mostrar tipos de datos y algunos metadatos para cada columna".

Fuente de cotizaciones: MAN MYSQLBINLOG

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top