Comment importer un fichier SQL à l'aide de la ligne de commande dans MySQL?

2036

J'ai un .sqlfichier avec une exportation de phpMyAdmin. Je souhaite l'importer sur un autre serveur à l'aide de la ligne de commande.

J'ai une installation de Windows Server 2008 R2. J'ai placé le .sqlfichier sur le lecteur C et j'ai essayé cette commande

database_name < file.sql

Ça ne marche pas. Je reçois des erreurs de syntaxe.

  • Comment puis-je importer ce fichier sans problème?
  • Dois-je d'abord créer une base de données?
Jaylen
la source
7
doublon possible du fichier de vidage MYSQL
Bill Karwin
2
doublon possible de stackoverflow.com/questions/11407349/…
AZinkey
8
Quoi avec ces gars en double? C'est en effet une question utile avec son propre but
Valentino Pereira
@ValentinoPereira avez-vous vérifié les dates des questions originales avant de déterminer les gars en double
AZinkey
Pouvez-vous partager un exemple reproductible? database < file.sqlne ressemble à aucune commande pour moi, et si vous voyez des erreurs de syntaxe, veuillez les partager
Nico Haase

Réponses:

3775

Essayer:

mysql -u username -p database_name < file.sql

Vérifiez les options MySQL .

Note-1: Il est préférable d'utiliser le chemin complet du fichier SQL file.sql.

Remarque-2: utilisez -Ret --triggerspour conserver les routines et les déclencheurs de la base de données d'origine. Ils ne sont pas copiés par défaut.

Note-3 Vous devrez peut-être créer la base de données (vide) à partir de mysql si elle n'existe pas déjà et que le SQL exporté ne contient pas CREATE DATABASE(exporté avec --no-create-dbou -noption), avant de pouvoir l'importer.

bansi
la source
2
Lorsque j'exécute le fichier à partir d'un programme comme Toad, je ne reçois aucune erreur, mais lorsque je l'exécute à partir de la ligne de commande, j'obtiens l'erreur que j'ai mentionnée
Jaylen
110
Notez que oui, vous devez créer la base de données (vide) à partir de mysql si elle n'existe pas déjà, avant de pouvoir l'importer.
Skippy le Grand Gourou
17
Oui, n'oubliez pas de créer une base de données vide (si la base de données n'existe pas auparavant), à partir de la console MySQL comme ceci:CREATE DATABASE db-name;
Qasim
3
Assurez-vous de vérifier que le fichier de sauvegarde ne contient pas "use 'original_db'". Bien que j'aie spécifié la restauration vers la nouvelle base de données "mysql new_db <dump.sql", le fichier de vidage sql avait cela dans, et il a écrasé ma base de données live. Je ne sais pas s'il existe une option pour le forcer à utiliser la base de données spécifiée et à ignorer le "utiliser 'original_db'" dans le fichier sql
Shaakir
7
@Joe, oui, si vous avez un espace entre «-p» et «mot de passe», il pense que «mot de passe» est le nom de la base de données. Alternativement, vous pouvez taper '-p' sans votre mot de passe, puis vous serez invité à entrer un mot de passe lorsque vous appuyez sur Entrée.
NotJay
765

Une utilisation courante de mysqldump est de faire une sauvegarde d'une base de données entière:

shell> mysqldump db_name > backup-file.sql

Vous pouvez charger le fichier de vidage sur le serveur comme ceci:

UNIX

shell> mysql db_name < backup-file.sql

La même chose dans l' invite de commande Windows :

mysql -p -u [user] [database] < backup-file.sql

PowerShell

C:\> cmd.exe /c "mysql -u root -p db_name < backup-file.sql"

Ligne de commande MySQL

mysql> use db_name;
mysql> source backup-file.sql;
Vladkras
la source
@Mike Essayez-vous de le lancer en mysql>ligne de commande? Vous devriez plutôt utiliser shell.
vladkras
Comment utiliser Shell? J'utilise mysql5.6 sur Windows Server 2008
Jaylen
En utilisant Windows PowerShell en tapant MySQL db_name <file.sql, j'obtiens l'erreur suivante, l'opérateur '<' est réservé pour une utilisation future
Jaylen
31
Soyez prudent lorsque vous utilisez le> pour rediriger la sortie de mysqldump vers un fichier, surtout si vous voulez contrôler l'encodage. Au lieu de cela, vous souhaiterez probablement utiliser le paramètre --result-file afin que l'encodage ne soit pas contrôlé par le shell / OS.
Bernard Chen
1
D'accord, mais ... pourquoi ne pas courir mysqldirectement de Powershell?
Charles Wood
330

En ce qui concerne le temps nécessaire à l'importation de fichiers volumineux: plus important encore, cela prend plus de temps car le paramètre par défaut de MySQL est autocommit = true. Vous devez désactiver cela avant d'importer votre fichier, puis vérifier comment l'importation fonctionne comme une gemme.

Vous avez juste besoin de faire la chose suivante:

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
Paresh Behede
la source
5
Existe-t-il un moyen de le faire dans une seule ligne de commande sur la commande mysql utilisée pour l'importation?
Volomike
Meilleure réponse inho. C'est le sourcecommandement que j'ai oublié. La plupart d'entre nous veulent le faire pendant que nous sommes connectés en tant que commande autonome parmi d'autres commandes, pas la connexion standard> injecter> déconnexion oneliner en haut de Google Serps.
davidkonrad
19
Je suis d'accord que c'est la meilleure réponse . La autocommit=0portion a fait toute la différence en termes de vitesse.
aexl
2
la autocommit=0volonté fonctionnera-t-elle sur des fichiers plus gros? comme un fichier sql de 8 Go.
débutant
3
Il n'est pas toujours nécessaire de désactiver autocommit. Cela vaut la peine de vérifier le vidage de la base de données dans un éditeur, cela pourrait déjà commencer SET autocommit=0;.
hashchange
127

Parmi toutes les réponses, pour le problème ci-dessus, c'est la meilleure:

 mysql> use db_name;
 mysql> source file_name.sql;
Manoj Kumar
la source
le conseil ci-dessus a échoué en
raison d'une
74

Nous pouvons utiliser cette commande pour importer SQL à partir de la ligne de commande:

mysql -u username -p password db_name < file.sql

Par exemple, si le nom d'utilisateur est rootet le mot de passe l'est password. Et vous avez un nom de base de données banket le fichier SQL l'est bank.sql. Ensuite, faites simplement ceci:

mysql -u root -p password bank < bank.sql

N'oubliez pas où se trouve votre fichier SQL. Si votre fichier SQL est dans le Desktopdossier / répertoire, allez dans le répertoire du bureau et entrez la commande comme ceci:

~ ? cd Desktop
~/Desktop ? mysql -u root -p password bank < bank.sql

Et si vous êtes dans le Projectrépertoire et que votre fichier SQL est dans le Desktoprépertoire. Si vous souhaitez y accéder à partir du Projectrépertoire, vous pouvez faire comme ceci:

~/Project ? mysql -u root -p password bank < ~/Desktop/bank.sql
Amrit Dhungana
la source
22
Il ne devrait pas y avoir d'espace entre -petpassword
Ejaz
Jap. Cela ne fonctionnerait pas. Correct seraitmysql -u root -p"password" bank < bank.sql
Armin
4
pourquoi vous ne pouvez tout simplement pas répondre en une seule ligne? mysql -u username -ppassword db_name < file.sql
Naveed
6
bien que cela n'ait aucun rapport avec cette question / réponse, lorsque vous travaillez avec des bases de données non triviales, préférez NE PAS saisir le mot de passe sur la même commande en texte brut. Ne pas spécifier le mot de passe dans le cadre de la commande vous demandera un mot de passe que vous pouvez entrer en toute sécurité
asgs
3
Surtout à cause de.bash_history
Neil Chowdhury
64

Le moyen le plus simple d'importer dans votre schéma:

Connectez-vous à mysql et lancez les commandes de mention ci-dessous.

mysql> use your_db_name;

mysql> source /opt/file.sql;
Ammad
la source
5
Cela fonctionnera sans la commande «use» pour les vidages contenant une base de données multilpe
Hayden Thring
1
J'essayais d'importer un vidage à partir d'une base de données avec un nom différent mais avec la même structure, la bonne réponse choisie par l'auteur n'a pas fonctionné, il a créé une nouvelle base de données nommée d'après la base de données dans le fichier de vidage. Cette réponse ici a fait ce que je voulais, merci mec
Wuelber Castillo
1
génial! exactement ce que je cherchais!
Sergei Zahharenko
2
cela surveille également l'exécution du script, bien mieux que les autres réponses
refex
61

Si vous disposez déjà de la base de données, utilisez ce qui suit pour importer le dumpou le sqlfichier:

mysql -u username -p database_name < file.sql

si vous ne l'avez pas, vous devez créer la base de données appropriée (vide) dans MySQL, pour cette première connexion à la MySQLconsole en exécutant la commande suivante dans le terminal ou dans cmd

mysql -u userName -p;

Et lorsque vous y êtes invité, fournissez le mot de passe.

Ensuite, créez une base de données et utilisez-la:

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

Importez ensuite le sqlou le dumpfichier dans la base de données à partir de

mysql> source pathToYourSQLFile;

Remarque: si votre terminal ne se trouve pas à l'emplacement où le fichier dumpou sqlexiste, utilisez le chemin relatif ci-dessus.

Kasun Siyambalapitiya
la source
Votre réponse avait une solution de base pour les débutants MySQL comme moi: 1.créez la base de données, si elle n'existe pas. 2.Pointez le fichier source vers la base de données créée pour importer des données / métadonnées.
Sumanth Lazarus
60
  1. Ouvrez la ligne de commande MySQL
  2. Tapez le chemin de votre répertoire bin mysql et appuyez sur Enter
  3. Collez votre fichier SQL dans le bin dossier du serveur mysql.
  4. Créez une base de données dans MySQL.
  5. Utilisez cette base de données particulière dans laquelle vous souhaitez importer le fichier SQL.
  6. Type source databasefilename.sql etEnter
  7. Le téléchargement de votre fichier SQL a réussi.
user4412947
la source
2
ype le chemin de votre répertoire mysql bin et appuyez sur
Ramesh Pareek
46

Une solution qui a fonctionné pour moi est ci-dessous:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;
Shiks
la source
Cela a fonctionné pour moi en utilisant le client de ligne de commande MySQL, après avoir placé mon fichier sql dans l'explorateur de fenêtres d'affichage du répertoire / bin approprié. Merci
klewis
3
Peu lent mais ne s'arrête pas entre les deux et ne dit pas que le serveur MySQL est parti.
Jaskaran Singh
39

Pour vider une base de données dans un fichier SQL, utilisez la commande suivante.

mysqldump -u username -p database_name > database_name.sql

Pour importer un fichier SQL dans une base de données (assurez-vous que vous êtes dans le même répertoire que le fichier SQL ou fournissez le chemin d'accès complet au fichier), procédez comme suit:

mysql -u username -p database_name < database_name.sql
Adeleke Akinade
la source
37

Allez dans le répertoire où vous avez l'exécutable MySQL. -upour le nom d'utilisateur et -ppour demander le mot de passe:

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql
Tanmay Patel
la source
5
Je pense que ce serait plus utile pour le PO et d'autres questions, lorsque vous ajoutez quelques explications à votre intention.
Reporter
Cela ne fonctionnerait que si vous avez défini mysql.exe dans vos variables d'environnement Windows. Sinon, vous devez taper tout le chemin d'accès au fichier mysql.exe. Et votre syntaxe est erronée. Par exemple: "d: \ wamp \ bin \ mysql \ mysql5.5.8 \ bin \ mysql.exe -u YOUR_USERNAME -p DB_NAME <FILENAME.SQL" Plus d'informations ici: wpy.me/en/blog/…
wappy
31

Je pense qu'il vaut la peine de mentionner que vous pouvez également charger un fichier compressé (compressé) avec zcatcomme illustré ci-dessous:

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name
Francesco Casula
la source
28

Pour importer une seule base de données, utilisez la commande suivante.

mysql -u username -p password dbname < dump.sql

Pour importer plusieurs vidages de base de données, utilisez la commande suivante.

mysql -u username -p password < dump.sql
Leopathu
la source
20
mysql --user=[user] --password=[password] [database] < news_ml_all.sql
user3546602
la source
17

Pour importer plusieurs fichiers SQL à la fois, utilisez ceci:

# Unix-based solution
for i in *.sql;do mysql -u root -pPassword DataBase < $i;done

Pour une importation simple:

# Unix-based solution
mysql -u root -pPassword DataBase < data.sql

Pour WAMP :

#mysqlVersion replace with your own version
C:\wamp\bin\mysql\mysqlVersion\bin\mysql.exe -u root -pPassword DataBase < data.sql

Pour XAMPP:

C:\xampp\mysql\bin\mysql -u root -pPassword DataBase < data.sql
Abdul Rehman Janjua
la source
16

Vous n'avez pas besoin de spécifier le nom de la base de données sur la ligne de commande si le fichier .sql contient CREATE DATABASE IF NOT EXISTS db_nameetUSE db_name instructions .

Assurez-vous simplement que vous vous connectez avec un utilisateur autorisé à créer la base de données, si la base de données mentionnée dans le fichier .sql n'existe pas.

Ruben
la source
14

Importer une base de données

  1. Allez conduire:

    command: d:
  2. Connexion MySQL

    command: c:\xampp\mysql\bin\mysql -u root -p
  3. Il demandera pwd. Entrez-le:

    pwd
  4. Sélectionnez la base de données

    use DbName;
  5. Indiquez le nom du fichier

    \.DbName.sql
Pritam Chaudhari
la source
11

Allez dans le répertoire où vous avez MySQL.

 c:\mysql\bin\> mysql -u username -p password database_name <
 filename.sql

Également pour vider toutes les bases de données, utilisez l' -all-databasesoption, et aucun nom de base de données ne doit plus être spécifié.

mysqldump -u username -ppassword all-databases > dump.sql

Ou vous pouvez utiliser certains clients GUI comme SQLyog pour ce faire.

Sathish D
la source
11

Utilisation:

mysql -u root -p password -D database_name << import.sql

Utilisez l'aide de MySQL pour plus de détails - mysql --help.

Je pense que ce seront des options utiles dans notre contexte:

[~]$ mysql --help
mysql  Ver 14.14 Distrib 5.7.20, for osx10.12 (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --bind-address=name IP address to bind to.
  -D, --database=name Database to use.
  --delimiter=name    Delimiter to be used.
  --default-character-set=name Set the default character set.
  -f, --force         Continue even if we get an SQL error.
  -p, --password[=name] Password to use when connecting to server.
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default (3306).
  --protocol=name     The protocol to use for connection (tcp, socket, pipe,
  -s, --silent        Be more silent. Print results with a tab as separator, each row on new line.
  -v, --verbose       Write more. (-v -v -v gives the table output format).
  -V, --version       Output version information and exit.
  -w, --wait          Wait and retry if connection is down.

Ce qui est amusant, si nous importons une grande base de données et que nous n'avons pas de barre de progression. Utilisez Pipe Viewer et voyez le transfert de données à travers le tuyau

Pour Mac, brew install pv

Pour Debian / Ubuntu, apt-get install pv .

Pour les autres, reportez-vous à pv - Pipe Viewer

pv import.sql | mysql -u root -p password -D database_name

1.45GiB 1:50:07 [339.0KiB/s]   [=============>      ] 14% ETA 11:09:36
1.46GiB 1:50:14 [ 246KiB/s]     [=============>      ] 14% ETA 11:09:15
1.47GiB 1:53:00 [ 385KiB/s]     [=============>      ] 14% ETA 11:05:36
Siva Praveen
la source
Pour Centos:yum install pv
Jonny
10

Ajoutez l' --forceoption :

mysql -u username -p database_name --force < file.sql
ktaria
la source
9

Alors que la plupart des réponses ici mentionnent simplement la commande simple

mysql -u database_user -p [nom_bd] <fichier_base de données.sql

aujourd'hui, il est assez courant que les bases de données et les tables aient une collation utf8 là où cette commande n'est pas suffisante. Ayant utf8-collation dans les tables exportées, il est nécessaire d'utiliser cette commande:

mysql -u database_user -p --default-character-set = utf8 [db_name] <database_file.sql

Surley, cela fonctionne aussi pour d'autres jeux de caractères, comment afficher la bonne notation ici:

https://dev.mysql.com/doc/refman/5.7/en/show-collation.html

Un commentaire mentionne également que si une base de données n'existe jamais, une base de données vide doit d'abord être créée. Cela peut être correct dans certains cas, mais cela dépend du fichier d'exportation. Si le fichier exporté comprend déjà la commande de création de la base de données, la base de données ne doit jamais être créée dans une étape séparée, ce qui pourrait même provoquer une erreur lors de l'importation. Donc, lors de l'importation, il est conseillé de consulter d'abord le fichier pour savoir quelles commandes y sont incluses, lors de l'exportation, il est conseillé de noter les paramètres, surtout si le fichier est très volumineux et difficile à lire dans un éditeur.

Il y a encore plus de paramètres pour la commande qui sont répertoriés et expliqués ici:

https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html

Si vous utilisez une autre version de base de données, envisagez également de rechercher la version correspondante du manuel. Les liens mentionnés se réfèrent à MySQL version 5.7.

David
la source
9

Pour exporter une base de données:

mysqldump -u username -p database_name > file.sql

Pour importer une base de données:

mysql -u username -p database_name < file.sql
user777388
la source
8

La commande suivante fonctionne pour moi à partir de la ligne de commande (cmd) sur Windows 7 sur WAMP .

d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql
Victor
la source
7

J'ai pensé que cela pourrait être utile pour ceux qui utilisent Mac OS X :

/Applications/xampp/xamppfiles/bin/mysql -u root -p database < database.sql

Remplacez xampppar mampou par d'autres serveurs Web.

Giri
la source
6

Parfois, le port défini ainsi que l' adresse IP du serveur de cette base de données comptent également ...

mysql -u user -p user -h <Server IP> -P<port> (DBNAME) < DB.sql 
JohnSharath
la source
6

Importer dans la base de données:

mysql -u nom d'utilisateur -p nom_base de données </ chemin d'accès au fichier / nom_fichier.sql

Exporter depuis la base de données:

mysqldump -u nom d'utilisateur -p nom_base de données> / chemin du fichier / nom_fichier.sql

Après ces commandes, une invite vous demandera votre mot de passe MySQL.

NeeruKSingh
la source
5

À des fins de sauvegarde, créez un fichier BAT et exécutez ce fichier BAT à l'aide du Planificateur de tâches . Il faudra une sauvegarde de la base de données; copiez simplement la ligne suivante et collez-la dans le Bloc - notes , puis enregistrez le fichier .bat et exécutez-le sur votre système.

@echo off
for /f "tokens=1" %%i in ('date /t') do set DATE_DOW=%%i
for /f "tokens=2" %%i in ('date /t') do set DATE_DAY=%%i
for /f %%i in ('echo %date_day:/=-%') do set DATE_DAY=%%i
for /f %%i in ('time /t') do set DATE_TIME=%%i
for /f %%i in ('echo %date_time::=-%') do set DATE_TIME=%%i

"C:\Program Files\MySQL\mysql server 5.5\bin\mysqldump" -u username -ppassword mysql>C:/%DATE_DAY%_%DATE_TIME%_database.sql
user3728517
la source
5

Les étapes suivantes aident à télécharger file.sql vers la base de données MySQL.

Étape 1: Ajouter file.sql.zipà un répertoire et il Décompressez
Remarque : sudo apt-get install unzip : sudo apt-get unzip file.sql.zip
Etape 2: Accédez à ce répertoire. Exemple:cd /var/www/html

Étape 3: mysql -u username -p database-name < file.sql
entrez le mot de passe et attendez la fin du téléchargement.

Ramesh Sinha
la source
5

J'ai continué à rencontrer le problème où la base de données n'a pas été créée.

Je l'ai réparé comme ça

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql
David Silva Smith
la source