2009-03-25 3 views
13

J'importe une base de données MySQL de 400 Mo (non compressée). J'utilise BigDump, et j'obtiens cette erreur:Erreur de base de données d'importation MySQL en raison d'insertions étendues

Stopped at the line 387. 

At this place the current query includes more than 300 dump lines. That can happen if your dump file was created by some tool which doesn't place a semicolon followed by a linebreak at the end of each query, or if your dump contains extended inserts. Please read the BigDump FAQs for more infos. 

Je crois que le fichier ne contient Insertions étendues, mais je n'ai aucun moyen de régénérer la base de données comme il a été supprimé de l'ancien serveur. Comment puis-je importer cette base de données ou la convertir pour qu'elle soit importée?

Merci pour toute aide.

Meilleur Nick

EDIT: Il semble que la seule réponse viable est de séparer les Insertions étendues, mais je encore besoin d'aide à trouver comment diviser le fichier comme la réponse ci-dessous suggère. S'il vous plaît aider. Je vous remercie.

Répondre

4

J'ai réussi à importer la base de données après avoir augmenté la mémoire tampon et effectué une importation mysql ordinaire via SSH.

J'ai utilisé la commande suivante avec le chemin absolu:

mysql -u <username> -p < /home/dir/dumpfile.sql 

Meilleur Nick

+0

Comment avez-vous augmenté la mémoire tampon? Je sais que c'est une vieille question, mais j'ai un problème similaire. – chmac

+1

@chmac C'était il y a longtemps mais je crois que le paramètre était innodb_buffer_pool_size dans my.cnf ou my.ini. –

8

modifier uniquement le fichier de vidage de sorte que, après 300 inserts vous commencez une nouvelle déclaration:

INSERT INTO `myTable` (`id`, `field1`, `field2`) VALUES 
    (1, 'a', 'b'), 
    (2, 'c', 'd'), 
    (3, 'e', 'f'), 
    -- snip -- 
    (300, 'w', 'x'); 
INSERT INTO `myTable` (`id`, `field1`, `field2`) VALUES 
    (301, 'y', 'z'), 
    (302, ... etc 

Vous pouvez le faire en ouvrant simplement votre fichier <backup>.sql dans un éditeur de texte, il est juste le texte brut. Parfois, une sauvegarde peut être un fichier .gz ou .bz, mais ce ne sont que des zips: si vous décompressez ces fichiers gzippés ou bzippés, vous obtiendrez un seul fichier .sql que vous pourrez éditer facilement.

Il ne serait probablement pas trop difficile d'écrire un script pour diviser chaque instruction après un nombre arbitraire de lignes. La logique du programme de base ressemblerait peut-être à ceci:

  1. trouver une ligne commençant par "INSERT".
  2. copier la ligne jusqu'à la fin du mot "VALEURS"
  3. parcourir toutes les lignes suivantes, en comptant au fur et à mesure. Si votre compteur atteint 300, ajoutez un point-virgule à la fin de la dernière ligne et collez dans l'instruction "INSERT ... VALUES" d'avant. Réinitialiser votre compteur à 1 et passez à l'étape 3.
  4. si vous atteignez une ligne qui commence par « INSERT », remettre le compteur à 1 et passez à l'étape 2.

Bien, vous pouvez simplement faire manuellement, puis assurez-vous que toutes les sauvegardes futures n'utilisent pas d'insertions étendues. De plus, phpMyAdmin vous permet de définir une taille d'instruction maximale lors de la création d'une exportation. Cependant, ce que vous avez fait avec la limite de mémoire est probablement une solution beaucoup plus facile. Pour tous les autres dans une situation similaire qui ne peuvent pas changer ces limites, essayez ce qui précède.

+0

Comment puis-je modifier le fichier? Je n'ai aucune idée de comment automatiser ce processus. –

+0

Je l'ai édité maintenant pour répondre. – nickf

29

Vous n'avez pas besoin d'apporter des modifications au fichier sql: BigDump vient d'ouvrir.php dans n'importe quel éditeur de texte, trouver la ligne

define ('MAX_QUERY_LINES',300); 

et remplacer 300 avec tout ce que vous voulez.

+4

Cela l'a fait pour moi, merci. Sauf pour la version 0.35b de bigdump.php, la ligne est: $ max_query_lines = 300; – nwilson5

0

Merci pour les solutions 'max_query_lines' et 'INSERT'! Les deux solutions présentent des inconvénients: sans insertion étendue, le vidage de sortie sera plusieurs fois plus important que le vidage avec des insertions étendues: l'augmentation de max_query_lines augmentera l'utilisation de la mémoire du script bigdump et votre serveur pourrait manquer de mémoire.

Source: http://www.etctips.com/error-at-this-place-the-current-query-includes-more-than-xxx-dump-lines/

3

Pour moi, il a travaillé comme suit:

Rechercher

$max_query_lines = 300; 

alors simplement remplacé à

$max_query_lines = 3000; 
0

question ancienne, mais je l'ai trouvé par recherche internet, et il n'a pas encore la réponse que je cherchais, il semble que phpMyAdmin a renommé le paramètre.

Pour désactiver « Insertions étendues » dans une exportation phpMyAdmin, vous devez définir la « syntaxe à utiliser lors de l'insertion de données » paramètre pour la première option:

include column names in every INSERT statement 
Example: INSERT INTO tbl_name (col_A,col_B,col_C) VALUES (1,2,3) 
Questions connexes