45 votes

Comment sauter une ligne lors de l'importation d'un mauvais dump MySQL

Compte tenu du mauvais mysqldump qui provoque une erreur à l'importation :

namtar backups # mysql -p < 2010-12-01.sql
Enter password: 
ERROR 1062 (23000) at line 8020: Duplicate entry 'lhe?' for key 'wrd_txt'

Existe-t-il un moyen facile de dire à l'import d'ignorer une ligne donnée et de continuer ?

(Oui, je sais que je peux éditer manuellement le fichier ou analyser la sortie, mais ce n'est pas très convaincant)

56voto

jmlsteele Points 698

Si vous pouvez refaire le vidage, vous pouvez ajouter --insert-ignore la ligne de commande lors du vidage.

Ou vous pouvez essayer d'utiliser la commande mysqlimport avec --force,qui continuera même si elle rencontre des erreurs MySQL.

40voto

Patrick Klingemann Points 4560

mysql -f -p < 2010-12-01.sql

le -f (force) étant l'option opérationnelle ici, a fonctionné pour moi.

27voto

Ben Points 505

En suivant les conseils de la réponse et du commentaire de jmlsteele, voici comment transformer les inserts en INSERT IGNORE la volée.

Si vous importez à partir d'un fichier sql :

sed -e "s/^INSERT INTO/INSERT IGNORE INTO/" < 2010-12-01.sql | mysql -p

Si vous importez à partir d'un fichier gz, envoyez simplement la sortie de gunzip dans sed au lieu d'utiliser l'entrée du fichier :

gunzip < 2010-12-01.sql.gz | sed -e "s/^INSERT INTO/INSERT IGNORE INTO/" | mysql -p

4voto

Robert Saylor Points 11

Très bon conseil. Je l'ai fait un peu différemment mais avec le même résultat.

perl -pi -e 's/INSERT INTO/INSERT IGNORE INTO/g' filename.sql

3voto

PromInc Points 1044

Les autres options sont certainement des options viables, mais une autre solution serait de simplement éditer le fichier .sql obtenu à partir du mysqldump.

Changement :

INSERT INTO table_name ...

À

INSERT IGNORE INTO table_name ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X