2009-03-31 23 views
14

Je dois importer une sauvegarde MySQL de grande taille (jusqu'à 10G). Cependant, le vidage sql est déjà prédéfini avec une structure de base de données avec définition d'index. Je veux accélérer l'insertion db en supprimant l'index et la définition de la table.Modification d'un fichier de vidage/de texte SQL très volumineux (sous Linux)

Cela signifie que je dois supprimer/modifier les premières lignes d'un fichier texte 10G . Quel est le moyen le plus efficace de le faire? sur linux?

Les programmes qui nécessitent le chargement de l'ensemble du fichier dans la RAM seront une surcharge pour moi.

Répondre

29

Plutôt que en supprimant les premières lignes, essayez de les modifier pour être des espaces. Le programme hexedit peut faire ceci: il lit les fichiers en morceaux, donc l'ouverture d'un fichier de 10 Go n'est pas différente de l'ouverture d'un fichier de 100 Ko.

$ 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

merci! ça fonctionne parfaitement! Aussi votre solution détaillée m'a beaucoup aidé! Merci! – geo

+0

Pour ceux qui n'ont pas accès à un référentiel, vous pouvez obtenir la source pour le fichier hexedit à partir de: http://rigaux.org/hexedit.html –

+0

Script hexedit, sed ou custom: http://muras.eu/2017/03/05/edit-big-mysqldump-files – Klerk

-1

Perl peut lire le fichier ligne par ligne:

perl -pi.bak -e 's/^ create index/- créer un index /'

+0

Cela nécessitera 10 Go d'espace libre supplémentaire, et tout le temps nécessaire pour diffuser tout le vidage d'un fichier vers un nouveau fichier. – ephemient

3

joe est un éditeur qui fonctionne bien avec de gros fichiers. Je l'ai juste utilisé pour éditer un fichier de vidage SQL de ~ 5G. Il a fallu environ une minute pour ouvrir le fichier et quelques minutes pour le sauvegarder, avec très peu d'utilisation de swap (sur un système avec 4G de RAM).

+0

Je l'ai utilisé pour un fichier de 130 Go et Joe a très bien fonctionné ainsi avec une petite empreinte de mémoire – jimkont

+0

Je l'ai juste utilisé pour un fichier 30gb ... a pris comme 5min pour charger sur machine mémoire 16gb avec échange de 8Go ... – Ross

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

ou

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