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
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.
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 ;
+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.
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é.
Importer un fichier SQL volumineux dans MySql via la ligne de commande
Exemple: mysql -u root -p aanew <aanew.sql