Mysql
 sql >> Database >  >> RDS >> Mysql

diff 2 grandi tabelle di database

Dai un'occhiata al Percona Toolkit open source --- in particolare, il pt-sincronizzazione-tabella utilità.

Il suo scopo principale è sincronizzare una tabella MySQL con la sua replica, ma poiché il suo output è l'insieme di comandi MySQL necessari per riconciliare le differenze tra due tabelle, è una scelta naturale per confrontare le due.

Quello che effettivamente fa sotto il cofano è un po' complesso e in realtà utilizza approcci diversi a seconda di ciò che può dire sulle tue tabelle (indici, ecc.), ma una delle idee di base è che esegue rapidamente checksum CRC32 su porzioni degli indici e se i checksum non corrispondono, esamina questi record più da vicino. Nota che questo metodo è molto più veloce che camminare linearmente su entrambi gli indici e confrontarli.

Ti prende solo in parte, però. Poiché i comandi generati hanno lo scopo di sincronizzare una replica con il relativo master, sostituiscono semplicemente il contenuto corrente della replica per tutti i record diversi. In altre parole, i comandi generati modificano all campi del record (non solo quelli modificati). Quindi una volta che usi pt-table-sync per trovare le differenze, dovresti racchiudere i risultati in qualcosa per esaminare i record diversi confrontando ogni campo nel record.

Ma pt-table-sync fa quella che già sapevi essere la parte difficile:rilevare le differenze, davvero veloce. È scritto in Perl; la fonte dovrebbe fornire buone briciole di pane.