Háttér

A quickly-hacked-together Python script to turn mysqldump files to CSV files. Optimalizálva a Wikipédia adatbázis dumps-ra.

Az extrém nagy MySQL dumps-ok importálása meglehetősen korlátozott hardveren nehéz vagy lehetetlen lehet. A bosszantó dolog a MySQL dumpokkal kapcsolatban az, hogy az egyetlen praktikus módja a manipulálásuknak a MySQL-en keresztül történik, ami lényegében hardverfrissítést igényel, ha valaki olyan nagy dumpsokkal akar dolgozni, mint a Wikipedia MySQL dumpjai.

Nem lenne nagyszerű, ha lenne valami módja a MySQL dump formátum (ami egy sor INSERT utasítás) átalakításának egy univerzális formátumba… mint pl…. CSV?

Nos, most már van.

Ez a rövid Python szkript kihasználja azt a tényt, hogy a MySQL INSERT utasítás szerkezete nem különbözik túlságosan a CSV-től, és a Python CSV parserét használja (némi szövegfeldolgozás előtt és után), hogy a MySQL dump fájlból CSV fájlt csináljon.

Használat

Elég a python mysqldump_to_csv.py és az SQL fájl neve után futtatni. Több SQL-fájlt is megadhat, és ezek mindegyike egy CSV-fájllá lesz összefűzve. Ez a szkript standard bemenetről is képes SQL fájlokat fogadni, ami hasznos lehet egy gzippelt MySQL dump CSV-fájllá alakításához anélkül, hogy a MySQL dumpot kitömörítené.

zcat dumpfile.sql.gz | python mysqldump_to_csv.py

Hogyan működik

A következő 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);

a következő CSV-vé alakul:

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

Nem túl nehéz belátni, hogy mi történik, de természetesen megnézheted a forráskódot, hogy pontosan lásd, hogyan történik az átalakítás.

Todo

  • Egy szigorú egységteszt-sorozat, amely bizonyítja, hogy ez működik a MySQL dump fájlok változatos halmazán, mellékhatások nélkül
  • Még több dokumentáció
  • Megoldás egy olyan hibára, amikor az egyik oszlop egy )-re végződő string, a következő oszlop pedig egy (-vel kezdődő string. A jelenlegi program logikája szerint a zárójeleket le kellene szedni.