web-dev-qa-db-fra.com

Importer un fichier SQL volumineux dans MySql via une ligne de commande

J'essaie d'importer un fichier SQL d'environ 300 Mo vers MySql via une ligne de commande dans Ubuntu. j'ai utilisé 

source /var/www/myfile.sql;

En ce moment, il affiche des rangées apparemment infinies de:

Query OK, 1 row affected (0.03 sec)

Cependant, cela fait un moment que ça fonctionne. Je n'ai pas importé un fichier aussi volumineux auparavant, alors je veux simplement savoir si c'est normal, si le processus se bloque ou s'il a des erreurs, cela s'affichera-t-il en ligne de commande ou ce processus continuera-t-il indéfiniment?

Merci

60
user2028856

Vous pouvez importer un fichier .sql en utilisant l’entrée standard comme ceci:

mysql -u <user> -p<password> <dbname> < file.sql

Remarque: Il ne devrait pas y avoir d'espace entre <-p> et <password>

Référence: http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html

Note pour les modifications suggérées: Cette réponse a été légèrement modifiée par les modifications suggérées pour utiliser le paramètre de mot de passe en ligne. Je peux le recommander pour les scripts, mais sachez que lorsque vous écrivez un mot de passe directement dans le paramètre (-p<password>), il peut être mis en cache par un historique Shell, qui révèle votre mot de passe à toute personne pouvant lire le fichier historique. Tandis que -p vous demande de saisir un mot de passe par saisie standard.

111
Martin Nuc

Les gars concernant le temps nécessaire à l'importation de gros fichiers sont plus importants car le paramètre par défaut de mysql est "autocommit = true", vous devez le désactiver avant d'importer votre fichier, puis vérifier comment l'importation fonctionne comme une gemme ...

Commencez par ouvrir MySQL:

mysql -u root -p

Ensuite, il vous suffit de faire ce qui suit:

mysql>use your_db

mysql>SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;

57
Paresh Behede

+1 à @MartinNuc, vous pouvez exécuter le client mysql en mode de traitement par lots et vous ne verrez pas le long flux de lignes "OK".

Le temps nécessaire pour importer un fichier SQL donné dépend de nombreux facteurs. Non seulement la taille du fichier, mais aussi le type d'instructions qu'il contient, la puissance de votre serveur serveur et le nombre de tâches en cours d'exécution simultanément. 

@MartinNuc dit qu'il peut charger 4 Go de SQL en 4 à 5 minutes, mais j'ai exécuté des fichiers SQL de 0,5 Go et cela a pris 45 minutes sur un serveur plus petit.

Nous ne pouvons pas vraiment deviner combien de temps il faudra pour exécuter votre script SQL sur votre serveur.


Re ton commentaire,

@MartinNuc est correct, vous pouvez choisir de faire en sorte que le client mysql imprime chaque déclaration. Ou vous pouvez ouvrir une deuxième session et exécuter mysql> SHOW PROCESSLIST pour voir ce qui est en cours d'exécution. Mais vous êtes probablement plus intéressé par un «pourcentage de réalisation» ou une estimation du temps nécessaire pour compléter les déclarations restantes.

Désolé, cette fonctionnalité n'existe pas. Le client mysql ne sait pas combien de temps il faudra pour exécuter des déclarations ultérieures, ni même combien il y en a. Donc, il ne peut pas donner une estimation significative du temps que cela prendra.

8
Bill Karwin

La solution que j'utilise pour une restauration SQL de grande taille est un script mysqldumpsplitter. Je divise mon sql.gz en tables individuelles. puis chargez quelque chose comme mysql workbench et traitez-le comme une restauration du schéma souhaité. 

Voici le script https://github.com/kedarvj/mysqldumpsplitter

Et cela fonctionne pour les restaurations SQL plus importantes, ma moyenne sur un site sur lequel je travaille est un fichier sql.gz de 2,5 Go, 20 Go non compressé et environ 100 Go une fois restauré.

0
Chris Richardson

Importer un fichier SQL volumineux dans MySql via la ligne de commande

  1. premier fichier téléchargé.
  2. coller le fichier à la maison.
  3. utilisez la commande suivante dans vos terminaux (CMD) 
  4. Syntaxe: Mysql -u nom d'utilisateur -p databsename <fichier.sql

Exemple: mysql -u root -p aanew <aanew.sql

0
Shailesh Sharma