sql >> Database >  >> RDS >> Mysql

diff 2 grote databasetabellen

Bekijk de open-source Percona Toolkit ---specifiek de pt-table-sync nutsvoorziening.

Het primaire doel is om een ​​MySQL-tabel te synchroniseren met zijn replica, maar aangezien de uitvoer de reeks MySQL-commando's is die nodig zijn om de verschillen tussen twee tabellen te verzoenen, is het een natuurlijke oplossing om de twee te vergelijken.

Wat het eigenlijk onder de motorkap doet, is een beetje ingewikkeld, en het gebruikt eigenlijk verschillende benaderingen, afhankelijk van wat het kan vertellen over je tabellen (indexen, enz.), maar een van de basisideeën is dat het snelle CRC32-controlesommen uitvoert op stukjes van de indexen , en als de controlesommen niet overeenkomen, worden die records nauwkeuriger onderzocht. Merk op dat deze methode veel is sneller dan beide indexen lineair lopen en vergelijken.

Het brengt je echter maar een deel van de weg. Omdat de gegenereerde opdrachten bedoeld zijn om een ​​replica met zijn master te synchroniseren, vervangen ze gewoon de huidige inhoud van de replica voor alle verschillende records. Met andere woorden, de gegenereerde commando's wijzigen all velden in het record (niet alleen de velden die zijn gewijzigd). Dus als je eenmaal pt-table-sync . gebruikt om de verschillen te vinden, moet u de resultaten in iets verpakken om de verschillende records te onderzoeken door elk veld in de record te vergelijken.

Maar pt-table-sync doet wat je al wist dat het moeilijkste was:diffs detecteren, echt snel. Het is geschreven in Perl; de bron zou goede broodkruimels moeten bieden.



  1. SQL ORDER BY:De 5 do's en don'ts om gegevens als een professional te sorteren

  2. Is het mogelijk om het schema op te geven bij het verbinden met postgres met JDBC?

  3. Hoe MariaDB op Ubuntu te installeren en te beveiligen

  4. Hoe maak ik een postgresql-gebruiker met fabric