web-dev-qa-db-fra.com

Comment puis-je analyser le fichier journal MySQL Bin pour les instructions (ligne / format mixte)

J'ai une base de données MySQL en cours d'exécution avec le journal binaire activé. Malheureusement, une déclaration a été exécutée par le client, qui s'est révélée erronée. Étant donné qu'un certain nombre d'enregistrements ont été "affectés", je souhaite commencer par analyser le bilogue des déclarations de changement de données à partir de cette période. Ensuite, nous pourrions être capable de commencer à ramasser les morceaux.

J'ai utilisé:

mysqlbinlog -v --base64-output=decode-rows --start-datetime="2015-06-26 08:30:00" --stop-datetime="2015-06-26 09:30:00" data/mysql-bin.000005 > C:\temp\binlog.txt 

La sortie est assez intimidante. Ce que j'apprécierais, c'est une stratégie pour analyser les déclarations d'insertion, de mise à jour ou de suppression. Gardez à l'esprit que je suis en mode mixte.

Merci.

2
Ifedi Okonkwo

Lorsque vous avez binlog_format=MIXED Certaines déclarations apparaîtront comme SQL réel. D'autres déclarations peuvent être obscurcies comme ceci:

### INSERT INTO `sanma`.`response`
### SET
###   @1=743096223
###   @2=0
###   @3='IR'
###   @4='UnderProcess'
###   @5=2015-05-29 20:51:34
###   @6=743053329
###   @7=NULL
###   @8=NULL
###   @9='758484829'
###   @10=1432912893
###   @11=758484829
###   @12='UnderProcess'
###   @13=0
###   @14=NULL
###   @15=NULL
###   @16=NULL
###   @17=NULL
# at 20535714
#150529 20:51:33 server id 71  end_log_pos 20535741     Xid = 84151212
COMMIT/*!*/;

Cette déclaration était possible de voir parce que le INSERT ... SET Syntaxe a été utilisée.

D'autres déclarations peuvent être obscopées au-delà de la reconnaissance. C'est le risque d'utiliser mixte ou une rangée.

J'ai traité cela récemment

La seule chose que vous puissiez faire est

# Look for INSERT, UPDATE, DELETE statements
mysqlbinlog ... > statements.sql
grep -i "^[IUD][NPE][SDL][EA][RT][TE]"     statements.sql  > dml.sql
grep -i "^### [IUD][NPE][SDL][EA][RT][TE]" statements.sql >> dml.sql

Il n'y a pas de garantie que vous attraperez chaque modification du formulaire de déclaration lorsque MySQLD passe par intermittence à Binlog_Format.

2
RolandoMySQLDBA

veuillez utiliser cet outil pour analyser l'instruction SQL

https://github.com/danfengcao/binlog2sql

0
LawrenceLi