Come importare un file SQL usando la riga di comando in MySQL?


2036

Ho un .sql file con un'esportazione da phpMyAdmin. Voglio importarlo in un altro server usando la riga di comando.

Ho un'installazione di Windows Server 2008 R2. Ho inserito il .sqlfile sull'unità C e ho provato questo comando

database_name < file.sql

Non funziona. Ottengo errori di sintassi.

  • Come posso importare questo file senza problemi?
  • Devo prima creare un database?

7
possibile duplicato del file di dump
Bill Karwin,


8
Cosa c'è con questi ragazzi duplicati? Questa è davvero una domanda utile con il suo scopo
Valentino Pereira,

@ValentinoPereira hai controllato le date delle domande originali prima di determinare i duplicati
AZinkey,

Puoi condividere un esempio riproducibile? database < file.sqlnon mi sembra alcun comando, e se vedi alcuni errori di sintassi, per favore condividili
Nico Haase,

Risposte:


3775

Provare:

mysql -u username -p database_name < file.sql

Controlla le opzioni di MySQL .

Nota-1: è meglio utilizzare il percorso completo del file SQL file.sql.

Nota-2: utilizzare -Re --triggersper mantenere le routine e i trigger del database originale. Non vengono copiati per impostazione predefinita.

Nota-3 Potrebbe essere necessario creare il database (vuoto) da mysql se non esiste già e se l'SQL esportato non contiene CREATE DATABASE(esportato con --no-create-dbo -nopzione), prima di poterlo importare.


2
Quando eseguo il file da un programma come Toad non ottengo alcun errore, ma quando lo eseguo dalla riga di comando ottengo l'errore che ho menzionato
Jaylen

110
Si noti che è necessario creare il database (vuoto) da mysql se non esiste già, prima di poterlo importare.
Skippy le Grand Gourou,

17
Sì, ricordati di creare un database vuoto (se il db non esiste in precedenza), dalla console MySQL in questo modo:CREATE DATABASE db-name;
Qasim

3
Assicurati di controllare che il file di backup non contenga "usa 'original_db'". Anche se ho specificato il ripristino nel nuovo DB "mysql new_db <dump.sql", il file di dump sql lo conteneva e sovrascriveva il mio database live. Non sono sicuro se esiste un'opzione per costringerlo a utilizzare il DB specificato e ignorare "use 'original_db'" nel file sql
Shaakir,

7
@Joe, sì, se hai uno spazio tra '-p' e 'password', pensa che 'password' sia il nome del database. In alternativa, puoi digitare '-p' senza la tua password e ti verrà richiesta una password quando premi Invio.
giovedì

765

Un uso comune di mysqldump è per fare un backup di un intero database:

shell> mysqldump db_name > backup-file.sql

È possibile caricare nuovamente il file dump nel server in questo modo:

UNIX

shell> mysql db_name < backup-file.sql

Lo stesso nel prompt dei comandi di Windows :

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

PowerShell

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

Riga di comando MySQL

mysql> use db_name;
mysql> source backup-file.sql;

@Mike Stai provando ad avviarlo dalla mysql>riga di comando? Dovresti usare invece shell.
Vladkras,

Come uso Shell? Sto usando mysql5.6 su Windows Server 2008
Jaylen il

Utilizzando Windows PowerShell digitando MySQL nome_db <file.sql ottengo il seguente errore l'operatore "<" è riservato per un uso futuro
Jaylen

31
Fai attenzione a usare> per reindirizzare l'output di mysqldump su un file, specialmente se vuoi controllare la codifica. Invece, probabilmente si desidera utilizzare il parametro --result-file in modo che la codifica non sia controllata dalla shell / dal sistema operativo.
Bernard Chen,

1
Giusto, ma ... perché non scappare mysqldirettamente da Powershell?
Charles Wood,

330

Per quanto riguarda il tempo impiegato per l'importazione di file di grandi dimensioni: soprattutto, ci vuole più tempo perché l'impostazione predefinita di MySQL è autocommit = true. È necessario disattivarlo prima di importare il file e quindi controllare come funziona l'importazione come una gemma.

Devi solo fare la seguente cosa:

mysql> use db_name;

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

5
C'è un modo per farlo in una singola riga di comando sul comando mysql utilizzato per l'importazione?
Volomike,

La migliore risposta inho. Era il sourcecomando che ho dimenticato. La maggior parte di noi vuole fare questo mentre noi siamo connessi come comando autonomo tra gli altri comandi, non il login standard> iniettare> Logout oneliner in parte superiore di Google SERP.
davidkonrad,

19
Sono d'accordo che questa è la risposta migliore . La autocommit=0porzione ha fatto la differenza in termini di velocità.
aexl,

2
sarà il autocommit=0funzionerà sui file più grandi? come il file sql da 8 GB.
Principiante

3
Non è sempre necessario spegnere autocommit. Vale la pena controllare il dump del database in un editor, potrebbe già iniziare SET autocommit=0;.
Scambio hash

127

Tra tutte le risposte, per il problema sopra riportato, questa è la migliore:

 mysql> use db_name;
 mysql> source file_name.sql;

avvisare sopra fallito per errore che db esiste già ma questo sembra funzionare
luky

74

Possiamo usare questo comando per importare SQL dalla riga di comando:

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

Ad esempio, se il nome utente è roote la password è password. E hai un nome di database come banke il file SQL è bank.sql. Quindi, fai semplicemente così:

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

Ricorda dove si trova il tuo file SQL. Se il tuo file SQL si trova nella Desktopcartella / directory, vai alla directory del desktop e inserisci il comando in questo modo:

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

E se sei nella Projectdirectory e il tuo file SQL è nella Desktopdirectory. Se vuoi accedervi dalla Projectdirectory, puoi fare così:

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

22
Non ci dovrebbe essere uno spazio tra -pepassword
Ejaz,

Jap. Questo non funzionerebbe. Corretto sarebbemysql -u root -p"password" bank < bank.sql
Armin,

4
perché semplicemente non puoi rispondere in una riga? mysql -u username -ppassword db_name < file.sql
Naveed,

6
mentre questo è completamente estraneo a questa domanda / risposta, quando lavori con database non banali, preferisci NON inserire la password sullo stesso comando in testo semplice. Se non si specifica la password come parte del comando, verrà richiesta la password che è possibile immettere in modo sicuro
asg

3
Soprattutto a causa di.bash_history
Neil Chowdhury il

64

Il modo più semplice per importare nel tuo schema:

Accedi a mysql e invia i comandi menzionati di seguito.

mysql> use your_db_name;

mysql> source /opt/file.sql;

5
Funzionerà senza il comando 'usa' per i dump con db multilpe
Hayden Thring,

1
Stavo cercando di importare un dump da un database con un nome diverso ma con la stessa struttura, la risposta giusta scelta dall'autore non funzionava, ha creato un nuovo database chiamato dopo il database nel file dump. Questa risposta qui ha fatto quello che volevo, grazie amico
Wuelber Castillo,

1
grande! esattamente quello che stavo cercando!
Sergei Zahharenko,

2
questo controlla anche l'esecuzione dello script, molto meglio delle altre risposte
refex

61

Se si dispone già del database, utilizzare quanto segue per importare dumpil sqlfile o :

mysql -u username -p database_name < file.sql

in caso contrario, è necessario creare il database pertinente (vuoto) in MySQL, per il primo accesso alla MySQLconsole eseguendo il comando seguente nel terminale o in cmd

mysql -u userName -p;

E quando richiesto fornire la password.

Quindi, crea un database e usalo:

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

Quindi importare la sqlo il dumpfile al database da

mysql> source pathToYourSQLFile;

Nota: se il terminale non si trova nella posizione in cui esiste il file dumpo sql, utilizzare il percorso relativo sopra.


La tua risposta ha avuto una soluzione innovativa per i principianti di MySQL come me: 1.creare il database, se non esiste. 2.Puntare il file di origine sul database creato per importare dati / metadati.
Sumanth Lazarus,

60
  1. Apri la riga di comando di MySQL
  2. Digita il percorso della tua directory mysql bin e premi Enter
  3. Incolla il tuo file SQL nella bincartella del server mysql.
  4. Crea un database in MySQL.
  5. Utilizzare quel particolare database in cui si desidera importare il file SQL.
  6. Digitare source databasefilename.sqleEnter
  7. Il tuo file SQL è stato caricato correttamente.

2
digita il percorso della tua directory mysql bin e premi
Ramesh Pareek

46

Di seguito una soluzione che ha funzionato per me:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;

Questo ha funzionato per me usando MySQL Command Line Client, dopo aver posizionato il mio file sql nella finestra di esplorazione di Windows con la directory / bin corretta. Grazie
klewis il

3
Poco lento ma non si ferma nel mezzo e non dire che il server MySQL è andato via.
Jaskaran Singh,

39

Per scaricare un database in un file SQL, utilizzare il comando seguente.

mysqldump -u username -p database_name > database_name.sql

Per importare un file SQL in un database (assicurarsi di trovarsi nella stessa directory del file SQL o fornire il percorso completo al file), eseguire:

mysql -u username -p database_name < database_name.sql

37

Vai alla directory in cui hai l'eseguibile MySQL. -uper nome utente e -pper richiedere la password:

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

5
Penso che sarebbe più utile per il PO e ulteriori domande, quando aggiungi qualche spiegazione alla tua intensione.
Reporter

Funzionerebbe solo se mysql.exe è stato definito nelle variabili di ambiente di Windows. In caso contrario, è necessario digitare tutto il percorso del file mysql.exe. E la tua sintassi è sbagliata. Ad esempio: "d: \ wamp \ bin \ mysql \ mysql5.5.8 \ bin \ mysql.exe -u YOUR_USERNAME -p DB_NAME <FILENAME.SQL" Ulteriori informazioni qui: wpy.me/en/blog/…
wappy

31

Penso che valga la pena ricordare che puoi anche caricare un file compresso (compresso) con zcatcome mostrato di seguito:

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

28

Per importare un singolo database, utilizzare il seguente comando.

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

Per importare più dump del database, utilizzare il comando seguente.

mysql -u username -p password < dump.sql

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

17

Per importare più file SQL contemporaneamente, utilizzare questo:

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

Per una semplice importazione:

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

Per WAMP :

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

Per XAMPP:

C:\xampp\mysql\bin\mysql -u root -pPassword DataBase < data.sql

16

Non è necessario specificare il nome del database sulla riga di comando se il file .sql contiene CREATE DATABASE IF NOT EXISTS db_nameeUSE db_name istruzioni.

Assicurati solo di connetterti con un utente che dispone delle autorizzazioni per creare il database, se il database menzionato nel file .sql non esiste.


14

Importa un database

  1. Vai a guidare:

    command: d:
  2. Login MySQL

    command: c:\xampp\mysql\bin\mysql -u root -p
  3. Chiederà pwd. Inseriscilo:

    pwd
  4. Seleziona il database

    use DbName;
  5. Fornire il nome del file

    \.DbName.sql

11

Vai alla directory in cui hai MySQL.

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

Inoltre, per scaricare tutti i database, utilizzare l' -all-databasesopzione e non è più necessario specificare alcun nome di database.

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

Oppure puoi usare alcuni client GUI come SQLyog per farlo.


11

Uso:

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

Utilizzare la guida di MySQL per i dettagli - mysql --help .

Penso che queste saranno opzioni utili nel nostro contesto:

[~]$ 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.

Ciò che è divertente, se stiamo importando un database di grandi dimensioni e non abbiamo una barra di avanzamento. Utilizzare Pipe Viewer e vedere il trasferimento dei dati attraverso la pipe

Per Mac, brew install pv

Per Debian / Ubuntu, apt-get install pv .

Per altri, consultare 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

Per Centos:yum install pv
Jonny il


9

Mentre la maggior parte delle risposte qui menziona solo il semplice comando

mysql -u database_user -p [nome_db] <database_file.sql

oggi è abbastanza comune che database e tabelle abbiano utf8-collation dove questo comando non è sufficiente. Avere utf8-collation nelle tabelle esportate è necessario usare questo comando:

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

Surley, questo funziona anche per altri set di caratteri, come mostrare la notazione giusta può essere visto qui:

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

Un commento menzionava anche che se un database non esiste mai, è necessario creare prima un database vuoto. Questo potrebbe essere giusto in alcuni casi, ma dipende dal file di esportazione. Se il file esportato include già il comando per creare il database, il database non deve mai essere creato in un passaggio separato, che potrebbe persino causare un errore durante l'importazione. Quindi all'importazione è consigliabile dare prima un'occhiata al file per sapere quali comandi sono inclusi lì, durante l'esportazione è consigliabile annotare le impostazioni, specialmente se il file è molto grande e difficile da leggere in un editor.

Ci sono ancora più parametri per il comando che sono elencati e spiegati qui:

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

Se si utilizza un'altra versione del database, considerare anche la ricerca della versione corrispondente del manuale. I collegamenti citati si riferiscono a MySQL versione 5.7.


9

Per esportare un database:

mysqldump -u username -p database_name > file.sql

Per importare un database:

mysql -u username -p database_name < file.sql

8

Il seguente comando funziona per me dalla riga di comando (cmd) su Windows 7 su WAMP .

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


7

Ho pensato che potesse essere utile per chi utilizza Mac OS X :

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

Sostituisci xamppcon mampo altri server web.


6

A volte anche la porta definita e l' indirizzo IP del server di quel database sono importanti ...

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

6

Importa nel database:

mysql -u username -p database_name </ percorso file / nome_file.sql

Esporta dal database:

mysqldump -u nome utente -p nome_database> / percorso file / nome_file.sql

Dopo questi comandi, un prompt chiederà la tua password MySQL.


5

A scopo di backup, creare un file BAT ed eseguire questo file BAT utilizzando l' Utilità di pianificazione . Ci vorrà un backup del database; basta copiare la seguente riga e incollare in Blocco note, quindi salvare il file .bat ed eseguirlo sul sistema.

@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

5

I seguenti passaggi aiutano a caricare file.sqlnel database MySQL.

Fase 1: Carica file.sql.zipa qualsiasi directory e decomprimere ci
Nota : sudo apt-get install unzip : sudo apt-get unzip file.sql.zip
Fase 2: Ora navigare a quella directory. Esempio:cd /var/www/html

Passaggio 3: mysql -u username -p database-name < file.sql
inserire la password e attendere fino al completamento del caricamento.


5

Ho continuato a imbattermi nel problema in cui il database non era stato creato.

L'ho risolto in questo modo

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.