Hintergrund

Ein schnell zusammengehacktes Python-Skript, um mysqldump-Dateien in CSV-Dateien zu verwandeln. Optimiert für Wikipedia-Datenbank-Dumps.

Außerordentlich große MySQL-Dumps können auf relativ begrenzter Hardware schwierig oder unmöglich zu importieren sein. Das Ärgerliche an einem MySQL-Dump ist, dass der einzige praktische Weg, ihn zu bearbeiten, über MySQL führt, was im Wesentlichen ein Hardware-Upgrade erfordert, wenn man mit großen Dumps wie den Wikipedia-MySQL-Dumps arbeiten will.

Wäre es nicht toll, wenn es eine Möglichkeit gäbe, das MySQL-Dump-Format (das eine Reihe von INSERT-Anweisungen ist) in ein universelles Format zu konvertieren… wie… CSV?

Jetzt gibt es eine Möglichkeit.

Dieses kurze Python-Skript macht sich die Tatsache zunutze, dass sich die Struktur einer MySQL-INSERT-Anweisung nicht allzu sehr von der einer CSV-Datei unterscheidet, und verwendet den Python-CSV-Parser (vor und nach einigen Textverarbeitungen), um die MySQL-Dump-Datei in eine CSV-Datei umzuwandeln.

Verwendung

Führen Sie einfach python mysqldump_to_csv.py gefolgt von dem Dateinamen einer SQL-Datei aus. Sie können mehrere SQL-Dateien angeben, die dann alle in einer CSV-Datei zusammengefügt werden. Dieses Skript kann auch SQL-Dateien von der Standardeingabe entgegennehmen, was nützlich sein kann, um einen gezipten MySQL-Dump in eine CSV-Datei zu verwandeln, ohne den MySQL-Dump zu dekomprimieren.

zcat dumpfile.sql.gz | python mysqldump_to_csv.py

Wie es funktioniert

Das folgende SQL:

INSERT INTO `page` VALUES (1,0,'April','',1,0,0,0.778582929065,'20140312223924','20140312223929',4657771,20236,0),(2,0,'August','',0,0,0,0.123830928525,'20140312221818','20140312221822',4360163,11466,0);

wird in die folgende CSV-Datei umgewandelt:

1,0,April,1,0,0,0.778582929065,20140312223924,20140312223929,4657771,20236,02,0,August,0,0,0,0.123830928525,20140312221818,20140312221822,4360163,11466,0

Es ist nicht allzu schwer zu erkennen, was vor sich geht, aber Sie können sich natürlich den Quellcode ansehen, um genau zu sehen, wie die Umwandlung vorgenommen wird.

Todo

  • Eine strenge Reihe von Unit-Tests, die beweisen, dass dies bei einer Reihe von MySQL-Dump-Dateien ohne Nebeneffekte funktioniert
  • Mehr Dokumentation
  • Eine Lösung für einen Fehler, bei dem eine Spalte eine Zeichenkette ist, die mit ) endet und die nächste Spalte eine Zeichenkette ist, die mit ( beginnt. Die derzeitige Programmlogik legt nahe, dass die Klammern entfernt werden.