Domanda

Ho i binlog di MySQL per la replica tramite GTID.

Sto cercando di mostrare le dichiarazioni di aggiornamento / inserimento eseguite come questa:

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

Ma tutto quello che vedo è qualcosa di simile, senza tracce di aggiornamento o inserire 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
.

Non sono sicuro del formato / configurazione della replica GTID e dove cercarlo ...

È stato utile?

Soluzione

Sembra che l'opzione --verbose debba essere aggiunta:

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

Nel risultato vedi:

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

@x sono le colonne della tabella nel loro ordine

Altri suggerimenti

Non penso che GTID sia il tuo problema.

Probabilmente usi la registrazione binaria basata sulla riga

Per verificare questo, eseguire una delle seguenti operazioni:

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

Vedrai ROW o MIXED. L'unico modo per vedere lo SQL, dovresti impostare Binlog_Format a STATEMENT in my.cnf e riavviare MySQLD perché la documentazione MySQL su Replica con Identificatori di transazione globali dice nel primo paragrafo:

.

È possibile utilizzare la replica basata sulla dichiarazione o basata sulla riga con GTID (vedere la sezione 17.1.2, "Formati di replica"); Tuttavia, per i migliori risultati, ti consigliamo di utilizzare il formato basato sulla riga.

Tuttavia, non si vede l'attuale SQL con i registri binari dati.

Prova questo strumento BINLOG2SQL , analizza il registro Bin per aggiornare / inserire dichiarazioni.
La sua descrizione dell'utilizzo è in cinese, ma credo che tu possa ottenere il punto dal comando di esempio.

Preferisco usare

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

Perché:

    .
  • "Se è data alcuna opzione NO -Base64-output, l'effetto è lo stesso di -Base64-output= Auto"
  • "La combinazione di --Base64-output= Decode-righe e --verbose fornisce un modo conveniente per vedere gli eventi di riga solo come istruzioni SQL" (Sumpressisce le istruzioni del binlog)

"Specificare --verbose o -v due volte per visualizzare anche i tipi di dati e alcuni metadati per ogni colonna."

Fonte di citazioni: uomo mysqlbinlog

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top