command-line données - Comment importer un fichier SQL en utilisant la ligne de commande dans MySQL?




exporter executer (25)

J'ai un fichier .sql avec une exportation de phpMyAdmin . Je veux l'importer dans un serveur différent en utilisant la ligne de commande.

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

database_name < file.sql

Cela ne fonctionne pas, j'obtiens des erreurs de syntaxe.

  • Comment puis-je importer ce fichier sans problème?
  • Ai-je besoin de créer une base de données en premier?

Answers

Importer dans la base de données: -

mysql -u nom d'utilisateur -p nom_base_de_données </ chemin du fichier / nom_fichier.sql

Exporter de la base de données: -

mysqldump -u nom d'utilisateur -p nom_base_de_données> / chemin_fichier / nom_fichier.sql

après ces commandes, l'invite vous demandera votre mot de passe mysql


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)

mysql u -username -p database_name < database_name.sql

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

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name

mysql --user=[user] --password=[password] [database] < news_ml_all.sql

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 dans 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;

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

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;

Ajoutez l' option --force :

mysql -u username -p database_name --force < file.sql

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 va demander pwd. Entrez-le:

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

    use DbName;
    
  5. Indiquez le nom du fichier

    \.DbName.sql
    

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

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

Pour vider toutes les bases de données, utilisez l'option -all-databases et aucun nom de base de données n'a besoin d'être spécifié.

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

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


Pour information j'ai juste eu la racine par défaut + sans mot de passe, cela n'a pas fonctionné avec toutes les réponses ci-dessus.

  • J'ai créé un nouvel utilisateur avec tous les privilèges et un mot de passe. Ça marche.

  • -ppppword SANS ESPACE.


J'utilise Windows 10 avec Powershell 5 et j'ai trouvé presque toutes les solutions "unix-like" ne fonctionnant pas pour moi.

> mysql -u[username] [database-name] < my-database.sql
At line:1 char:31
+ mysql -u[username] [database-name] < my-database.sql
+                               ~
The '<' operator is reserved for future use.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RedirectionNotSupported

Je finis par utiliser cette commande.

> type my-database.sql | mysql -u[username] -h[localhost] -p [database-name]

et cela fonctionne parfaitement, j'espère que ça aide.

Merci à la answer de @ btw.


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

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql

Je pensais que cela pourrait être utile pour ceux qui utilisent Mac OS X :

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

Remplacer xampp avec mamp ou d'autres serveurs Web.


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

Fournir des informations d'identification sur la ligne de commande n'est pas une bonne idée. Les réponses ci-dessus sont bonnes, mais négligez de mentionner

mysql --defaults-extra-file=etc/myhost.cnf database_name < file.sql

Où etc / myhost.cnf est un fichier qui contient l'hôte, l'utilisateur, le mot de passe, et vous évitez d'exposer le mot de passe sur la ligne de commande. Voici un exemple,

[client]
host=hostname.domainname
user=dbusername
password=dbpassword

  1. Ouvrez la ligne de commande MySQL
  2. Tapez le chemin de votre répertoire mysql bin et appuyez sur Entrée
  3. Collez votre fichier SQL dans le dossier bin du serveur mysql.
  4. Créer 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. Tapez source databasefilename.sql et Entrée
  7. Votre téléchargement de fichier SQL avec succès.

Similaire à https://.com/a/17666285/1888983
Principales différences pour moi:

  1. La base de données doit d'abord exister
  2. Pas d'espace entre -p et le mot de passe
shell> mysql -u root -ppassword #note: no space between -p and password
mysql> CREATE DATABASE databasename;
mysql> using databasename;
mysql> source /path/to/backup.sql

Running Fedora 26 avec MariaDB.


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

Utiliser 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 ne pas avoir une barre de progression. Utilisez Pipe Viewer et voir le transfert de données à travers le tuyau

Pour Mac, brew install pv . Pour Debian / Ubuntu, apt-get install pv . D'autres, référez-vous à http://www.ivarch.com/programs/pv.shtml

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

En ce qui concerne le temps nécessaire à l'importation de fichiers volumineux: le plus important est que cela prend plus de temps 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.

Vous avez juste besoin de faire ce qui suit:

mysql> use db_name;

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

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 l'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

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 .

Note-2: Utilisez -R et --triggers pour conserver les routines et les triggers de la base de données d'origine. Ils ne sont pas copiés par défaut.


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

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

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

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

Rappelez-vous où se trouve votre fichier SQL. Si votre fichier SQL se trouve dans le répertoire / dossier Desktop , 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 répertoire Project et que votre fichier SQL se trouve dans le répertoire Desktop . Si vous voulez y accéder à partir du répertoire du Project , vous pouvez faire comme ceci:

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

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

mysql -u database_user -p <fichier_base_de_données.sql

Aujourd'hui, il est assez courant que les bases de données et les tables aient un assemblage utf8 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 utilisateur_base_de_données -p --default-character-set = utf8 <fichier_base_de_données.sql

Surley cela fonctionne aussi pour d'autres charsets, comment montrer la bonne notation peut être vu ici:

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

Un commentaire a également mentionné 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é contient déjà la commande permettant de créer la base de données, la base de données ne doit jamais être créée dans une étape séparée, ce qui peut même provoquer une erreur lors de l'importation. Donc, à l'importation, il est conseillé de regarder d'abord dans le fichier pour savoir quelles commandes sont incluses, à 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 listé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, pensez également à rechercher la version correspondante du manuel. Les liens mentionnés se réfèrent à MySQL version 5.7.


À 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 Notepad - Notepad , puis enregistrez le fichier .bat et lancez-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

UPDATE table 
SET Col1 = i.Col1, 
    Col2 = i.Col2 
FROM (
    SELECT ID, Col1, Col2 
    FROM other_table) i
WHERE 
    i.ID = table.ID




mysql sql command-line import