2008-11-12 13 views
5

Was ist der einfachste Weg, um die Daten für eine einzelne Tabelle zu erhalten, löschen Sie eine einzelne Tabelle oder brechen Sie die gesamte Dump-Datei in Dateien, die jeweils einzelne Tabellen enthalten? Meistens mache ich eine Menge Video Regex Munging, aber ich wette, es gibt einfachere Möglichkeiten, diese Dinge mit awk/perl etc. zu tun. Die erste Seite der Google-Ergebnisse bringt eine Reihe von nicht funktionierenden Perl-Skripten zurück.Manipulieren von riesigen MySQL-Dump-Dateien

Antwort

9

Sparen Sie sich eine Menge Ärger und verwenden Sie mysqldump -T, wenn Sie können.

Vom documentation:

--tab = path, -T Weg

Produce Tab-getrennte Datendateien. Für jede ausgegebene Tabelle erstellt mysqldump eine Datei tbl_name.sql, die die CREATE TABLE-Anweisung , die die Tabelle erstellt, und eine Datei tbl_name.txt enthält, die die Daten enthält. Der Optionswert ist das Verzeichnis, in das die Dateien geschrieben werden.

Standardmäßig werden die .txt-Datendateien mithilfe der Tabulatorzeichen zwischen Spaltenwerten und einem Zeilenumbruch am Ende jeder Zeile formatiert. Das Format kann explizit mit den Optionen --fields-xxx und --lines-terminated-by angegeben werden.

Hinweis
Diese Option sollte nur verwendet werden, wenn mysqldump auf demselben Computer ausgeführt wird wie der mysqld-Server. Sie müssen über die Berechtigung FILE verfügen, , und der Server muss über die Berechtigung zum Schreiben von Dateien in das von Ihnen angegebene Verzeichnis verfügen.

11

Wenn ich eine einzelne Tabelle von einem SQL-Dump ziehen muss, verwende ich eine Kombination aus Grep, Kopf und Schwanz.

ZB:

grep -n "CREATE TABLE" dump.sql 

Dies gibt Ihnen dann die Zeilennummern für jeden, also, wenn Sie Ihre Tabelle auf der Linie 200 ist und die eine nach der Grenze auf der Linie 269, ich mache:

head -n 268 dump.sql > tophalf.sql 
tail -n 69 tophalf.sql > yourtable.sql 

Ich könnte mir vorstellen, dass Sie nach diesen Prinzipien ein Skript erstellen könnten, das das Ganze in eine Datei pro Tabelle zerlegt.

Wer möchte hier gehen?

Ein weiteres Bit, das eine Bash-Schleife beginnen würde helfen könnte: Ihnen eine schöne Liste von Zeilennummern und Tabellennamen

grep -n "CREATE TABLE " dump.sql | tr ':`(' ' ' | awk '{print $1, $4}' 

, das wie gibt:

200 FooTable 
269 BarTable 
+0

Der Ausgang des Kopfes kann einfach an Schwanz geleitet werden - das ist keine schlechte Idee – deadprogrammer

+0

recht interessante Lösung aber Maatkit können das gleiche tun und noch mehr: D –

4

This shell script wird die gewünschten Tabellen greifen und an splitted.sql übergeben.

Es ist in der Lage, reguläre Ausdrücke zu verstehen, wie ich eine sed -r Option hinzugefügt habe.

Auch MyDumpSplitter kann den Speicherauszug in einzelne Tabellenauszüge aufteilen.

0

Ich bin ein bisschen zu spät, aber wenn es jedem helfen kann, musste ich eine riesige SQL-Dump-Datei aufteilen, um die Daten auf einen anderen MySQL-Server zu importieren. Was ich am Ende getan habe, war das Teilen der Speicherauszugsdatei mit dem Systembefehl.

Split -l 1000 import.sql splited_file

Die oben wird die SQL-Datei alle 1000 Zeilen aufgeteilt.

hoffte, das hilft jemand