sql >> Databasteknik >  >> RDS >> Mysql

diff 2 stora databastabeller

Kolla in Percona Toolkit med öppen källkod ---specifikt, pt-table-sync verktyg.

Dess primära syfte är att synkronisera en MySQL-tabell med dess replika, men eftersom dess utdata är den uppsättning MySQL-kommandon som krävs för att förena skillnaderna mellan två tabeller, är det en naturlig passform för att jämföra de två.

Vad den faktiskt gör under huven är lite komplex, och den använder faktiskt olika tillvägagångssätt beroende på vad den kan berätta om dina tabeller (index, etc.), men en av grundidéerna är att den gör snabba CRC32-kontrollsummor på bitar av indexen , och om kontrollsummorna inte stämmer överens undersöker den dessa poster närmare. Observera att den här metoden är mycket snabbare än att gå båda indexen linjärt och jämföra dem.

Det tar dig dock bara en del av vägen. Eftersom de genererade kommandona är avsedda att synkronisera en replik med dess master, ersätter de helt enkelt det aktuella innehållet i repliken för alla olika poster. Med andra ord, kommandona som genereras ändrar all fält i posten (inte bara de som har ändrats). Så när du använder pt-table-sync för att hitta skillnaderna måste du slå in resultaten i något för att undersöka de olika posterna genom att jämföra varje fält i posten.

Men pt-table-sync gör det du redan visste var den svåra delen:att upptäcka skillnader, verkligen snabb. Det är skrivet i Perl; källan bör ge bra ströbröd.



  1. hur gör man anslutningspooling i java?

  2. PHP Sortering från serialiserade data

  3. Återställ arraypekaren i PDO-resultat

  4. CROSS/YTTRE ANSÖK i MySQL