Come eseguire lo script SQL in MySQL?


409

Voglio eseguire un file di testo contenente query SQL, in MySQL.

Ho provato a correre source /Desktop/test.sqle ho ricevuto l'errore:

mysql>. \ home \ sivakumar \ Desktop \ test.sql ERRORE: impossibile aprire il file '\ home \ sivakumar \ Desktop \ test.sql', errore: 2

Qualche idea su cosa sto facendo di sbagliato?



fondamentalmente penso che questa dovrebbe essere la risposta qui: \. /home/sivakumar/Desktop/test.sql
talsibony

Risposte:


434

Se sei alla riga di comando di MySQL mysql>devi dichiarare il file SQL come source.

mysql> source \home\user\Desktop\test.sql;

29
Per mysql 5.6.10 su Mac, non sono necessarie virgolette singole per il percorso del file.
RNA,

3
per Windows, usare '/' invece di '\' ha funzionato correttamente per me. Ho avuto errori quando ho usato originariamente '/'. Questo è ciò che ha funzionato per me ... fonte C: /Users/macombers/Downloads/midcoast_db.sql;
Zack Macomber,

Rilascia anche le virgolette su Ubuntu (mysql Ver 14.14 debian-linux-gnu (x86_64) usando il wrapper EditLine)
Siddhartha

1
@kapil Rispetto a cosa? Sei dentro MySQL a questo punto, quindi non ho parenti che temo.
Thomas Edwards,

1
@Sarah È possibile utilizzare \ prima dello spazio o racchiudere il nome file ".
Thomas Edwards,

166

Hai molte opzioni:

  • utilizzare il client della riga di comando di MySQL: mysql -h hostname -u user database < path/to/test.sql
  • Installa gli strumenti della GUI di MySQL e apri il tuo file SQL, quindi eseguilo
  • Utilizzare phpmysql se il database è disponibile tramite il server Web

3
E la password dell'utente (opzione -p)?
Amir Katz,

@AmirKatz Anche se la password può essere fornita con l' -popzione, questo non è raccomandato: altri utenti sullo stesso host possono usare strumenti di sistema come psleggerlo in questo caso.
Eugen Rieck,

1
@EugenRieck -psenza un argomento richiede di inserire la password nella riga successiva
Bobby Jack,

130

puoi eseguire istruzioni mysql che sono state scritte in un file di testo usando il seguente comando:

mysql -u yourusername -p yourpassword yourdatabase < text_file

se il tuo database non è stato ancora creato, accedi prima al tuo mysql usando:

mysql -u yourusername -p yourpassword yourdatabase

poi:

mysql>CREATE DATABASE a_new_database_name

poi:

mysql -u yourusername -p yourpassword a_new_database_name < text_file

quello dovrebbe farlo!

Maggiori informazioni qui: http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html


7
su Windows: per la password ho dovuto usare le virgolette e NESSUN spazio per farlo funzionare (la password stessa non conteneva spazi o caratteri speciali):mysql -u yourusername -p"yourpassword"
TmTron

1
Se non si desidera che la password sia sul prompt Credo che il metodo descritto qui funziona: stackoverflow.com/questions/9293042/...
alex9311

59

La mia opzione preferita per farlo sarà:

 mysql --user="username" --database="databasename" --password="yourpassword" < "filepath"

Lo uso in questo modo perché quando lo stringi con "" eviti il ​​percorso sbagliato e gli errori con gli spazi e - e probabilmente più problemi con i caratteri che non ho riscontrato.


Con il commento di @elcuco suggerisco di usare prima questo comando con [spazio], in modo che dica a bash di ignorarlo salvandolo nella cronologia, questo funzionerà immediatamente nella maggior parte dei casi.

se continua a salvare il tuo comando nella cronologia, ti preghiamo di visualizzare le seguenti soluzioni:

Esegui il comando senza tenerlo nella cronologia


sicurezza extra modifica

Nel caso in cui tu voglia essere più sicuro, puoi usare il seguente comando e inserire la password nell'input della riga di comando:

mysql --user="username" --database="databasename" -p < "filepath"

18
Non consiglierei di passare la password alla riga di comando, poiché verrà salvata nella ~ / .bash_history e sarà accessibile da altri programmi tramite / proc /.
elcuco,

Ottimo consiglio da @elcuco! Inoltre, probabilmente usa un altro flag dopo -p (o deve essere l'ultimo argomento), quindi un altro parametro non viene erroneamente considerato la password desiderata.
Davernator,

Si noti che gli argomenti della riga di comando sono ancora visibili da altri utenti. Esempio: per i in / proc / * / cmdline; fare l'eco $ i; gatto $ i; fatto
elcuco il

Questa NON è una nuova raccomandazione quando esponi la password del tuo server alla cronologia della console
Alexius DIAKOGIANNIS

@AlexiusDiakogiannis mi puoi dare un esempio come puoi visualizzare il comando dalla cronologia quando lo esegui con [spazio] prima del comando?
talsibony,

56

Tutte le risposte migliori sono buone. Ma nel caso in cui qualcuno desideri eseguire la query da un file di testo su un server remoto E salvare i risultati in un file (anziché mostrarlo sulla console), puoi farlo:

mysql -u yourusername -p yourpassword yourdatabase < query_file > results_file

Spero che questo aiuti qualcuno.


10
Penso che non ci dovrebbe essere spazio tra -pe la password
webNeat

Se lo scopo di scrivere su un file sta prendendo il dump dei dati, immagino SELECT ... INTO OUTFILE /path/to/file.csvsia un modo più efficiente. Vedi le opzioni e la sintassi qui - dev.mysql.com/doc/refman/5.7/en/select-into.html
Anis,

20

Dai il percorso del file .sql come:

source c:/dump/SQL/file_name.sql;

Vedi nell'immagine:


Grazie mille! funziona anche se il tuo utente non ha i diritti SUDO e su Amazon RDS remoto
Volatil3,

20

Sono venuto qui anche alla ricerca di questa risposta, ed ecco quello che ho trovato funziona meglio per me: Nota che sto usando Ubuntu 16.xx

  1. Accedi a mysql usando:

mysql -u <your_user> - p

  1. Al prompt di mysql, immettere:

source file_name.sql

Spero che sia di aiuto.


2
Invece di avviare il prompt, potrebbe anche essere utile combinare i due passaggi in un solo comando:mysql -u<user> -p -e 'source filename.sql'
Junix

Grazie @junix! L' opzione sorgente utilizzata in questo modo è ciò che stavo cercando.
ManuelJE,

14
mysql> source C:\Users\admin\Desktop\fn_Split.sql

Non specificare virgolette singole.

Se il comando sopra non funziona, copia il file su c: drive e riprova. come mostrato di seguito,

mysql> source C:\fn_Split.sql

13

Non è mai buona prassi passare l'argomento password direttamente dalla riga di comando, viene salvato nel ~/.bash_historyfile e può essere accessibile da altre applicazioni.

Usa questo invece:

mysql -u user --host host --port 9999 database_name < /scripts/script.sql -p
Enter password:


9

Molto probabilmente, devi solo cambiare la barra / blackslash: da

 \home\sivakumar\Desktop\test.sql

per

 /home/sivakumar/Desktop/test.sql

Quindi il comando sarebbe:

source /home/sivakumar/Desktop/test.sql

6

utilizzare quanto segue dal prompt dei comandi di mysql -

source \\home\\user\\Desktop\\test.sql;

Non usare offerte. Anche se il percorso contiene spazio ('') non utilizzare alcuna citazione .


5

invece del reindirizzamento, farei quanto segue

mysql -h <hostname> -u <username> --password=<password> -D <database> -e 'source <path-to-sql-file>'

Questo eseguirà il file path-to-sql-file


5

Tanti modi per farlo.

From Workbench: File > Run SQL Script -- then follow prompts

From Windows Command Line:
   Option 1: mysql -u usr -p
             mysql> source file_path.sql
   Option 2: mysql -u usr -p '-e source file_path.sql'
   Option 3: mysql -u usr -p < file_path.sql
   Option 4: put multiple 'source' statements inside of file_path.sql (I do this to drop and recreate schemas/databases which requires multiple files to be run)
             mysql -u usr -p < file_path.sql

Se ricevi errori dalla riga di comando, assicurati di averlo eseguito in precedenza

cd {!!>>mysqld.exe home directory here<<!!}
mysqld.exe --initialize 

Questo deve essere eseguito dalla directory mysqld.exe, da cui il CD.

Spero che questo sia utile e non solo ridondante.


3

Dal momento che mysql -u yourusername -p yourpassword yourdatabase < text_filenon ha funzionato su un server remoto (Amazon EC2) ...

Assicurarsi che il database sia stato creato per primo.

Poi:

mysql --host=localhost --user=your_username --password=your_password your_database_name < pathTofilename.sql

3

Per riferimento futuro, ho scoperto che funziona rispetto ai metodi sopra menzionati, sotto Windows nella tua console msql:

mysql >>source c://path_to_file//path_to_file//file_name.sql;

Se l'unità radice non viene chiamata "c", basta scambiare con ciò che viene chiamata l'unità. Prima prova le barre rovesciate, se non funzionano, prova la barra. Se anche non funzionano, assicurati di avere il percorso completo del file, l'estensione .sql sul nome del file e se la tua versione insiste sui punti e virgola, assicurati che sia lì e riprova.


0

Ho avuto questo errore e ho provato tutti i consigli che ho potuto ottenere inutilmente.

Alla fine, il problema era che la mia cartella aveva uno spazio nel nome della cartella che appariva come una barra nel percorso della cartella, una volta che l'ho trovata e rimossa, ha funzionato bene.

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.