2009-03-31 10 views
14

Ich muss einen großen MySQL-Dump (bis zu 10G) importieren. Allerdings ist der SQL-Dump bereits mit einer Datenbankstruktur mit Indexdefinition vordefiniert. Ich möchte die DB-Einfügung beschleunigen, indem ich die Index- und Tabellendefinition entferne.Bearbeiten sehr große SQL-Dump/Text-Datei (unter Linux)

Das heißt, ich muß entfernen/bearbeiten die ersten Zeilen einer 10G Textdatei. Was ist der effizienteste Weg dies zu tun auf Linux?

Programme, die das Laden der gesamten Datei in RAM erfordern, sind für mich ein Overkill.

Antwort

29

Anstatt Entfernen die ersten paar Zeilen, versuchen Sie, sie als Leerzeichen zu bearbeiten.

Das Programm hexedit kann dies tun - es liest Dateien in Chunks, so das Öffnen einer 10GB-Datei unterscheidet sich nicht davon, eine 100KB-Datei zu öffnen.

$ hexedit largefile.sql.dump 
tab (switch to ASCII side) 
space (repeat as needed until your header is gone) 
F2 (save)/Ctrl-X (save and exit)/Ctrl-C (exit without saving) 
+1

Dank! es funktioniert perfekt! Auch Ihre Detaillösung hat mir sehr geholfen! Vielen Dank! – geo

+0

Für diejenigen, die keinen Zugriff auf ein Repository haben, können Sie die Quelle für Hexedit erhalten: http://rigaux.org/hexedit.html –

+0

hexedit, sed oder custom script: http://muras.eu/2017/03/05/editing-big-mysqldump-files – Klerk

-1

Perl können die Datei Zeile für Zeile lesen:

perl -pi.bak -e 's/^ create index/- create index /'

+0

Dies erfordert weitere 10 GB freien Speicherplatz und jede Zeit, die es dauert, den gesamten Speicherauszug von einer Datei in eine neue Datei zu streamen. – ephemient

3

joe ein Editor ist, das funktioniert gut mit großen Dateien. Ich habe es nur benutzt, um eine ~ 5G SQL-Dump-Datei zu bearbeiten. Es dauerte ungefähr eine Minute, um die Datei zu öffnen und ein paar Minuten, um sie zu speichern, mit sehr wenig Verwendung von Swap (auf einem System mit 4G RAM).

+0

Ich habe es für eine 130 GB-Datei verwendet und Joe arbeitete auch ziemlich gut mit einem kleinen Speicherbedarf – jimkont

+0

Ich habe es nur für eine 30GB-Datei verwendet ... dauerte 5min auf 16GB Speichermaschine mit 8GB Swap zu laden ... – Ross

2
sed 's/OLD_TEXT/NEW_TEXT/g' <oldfile> newfile 

oder

cat file | sed 's/OLD_TEXT/NEW_TEXT/g' > newfile