Question

J'ai des binlogs MySQL pour la réplication via GTID.

J'essaie d'afficher les instructions de mise à jour/insertion exécutées comme ceci :

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

Mais tout ce que je vois, c'est quelque chose comme ça, aucune trace de mise à jour ou d'insertion 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

Je ne suis pas sûr du format/configuration de la réplication GTID et où la chercher...

Était-ce utile?

La solution

Il semble que l'option --verbose soit ajoutée:

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

Dans le résultat que vous voyez:

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

@x sont les colonnes de table dans leur commande

Autres conseils

Je ne pense pas que GTID soit votre problème.

Vous utilisez probablement la journalisation binaire basée sur les lignes

Pour vérifier cela, exécutez l'une des opérations suivantes :

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

Soit vous verrez ROW ou MIXED.La seule façon de voir le SQL, vous devrez définir format_binlog à STATEMENT dans my.cnf et redémarrez mysqld car la documentation MySQL sur Réplication avec des identifiants de transaction globaux dit dans le premier paragraphe :

Vous pouvez utiliser une réplication basée sur les instructions ou sur les lignes avec les GTID (voir Section 17.1.2, « Formats de réplication ») ;cependant, pour de meilleurs résultats, nous vous recommandons d’utiliser le format basé sur les lignes.

Néanmoins, vous ne verrez pas le SQL réel avec les journaux binaires donnés.

Essayez cet outil Binlog2SQL , il analyser le journal des bacs pour mettre à jour / insérer des relevés.
Sa description d'utilisation est en chinois, mais je pense que vous pouvez obtenir le point de la commande exemple.

Je préfère utiliser

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

Parce que:

  • "Si l'option NO -BASE64-SORTIE est donnée, l'effet est identique à la même que --Base64-Sortie= Auto"
  • "La combinaison de --base64-Sortie= Decod-Rows and --verbose offre un moyen pratique de voir les événements de ligne uniquement en tant que relevés SQL" (il superpresse les relevés de binogog)

"Spécifiez -verbose ou -v deux fois pour afficher également des types de données et des métadonnées pour chaque colonne."

source de citations: homme mysqlbinlog

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top