Wie führe ich ein SQL-Skript in MySQL aus?

409

Ich möchte eine Textdatei mit SQL-Abfragen in MySQL ausführen.

Ich habe versucht zu rennen source /Desktop/test.sql und habe den Fehler erhalten:

mysql>. \ home \ sivakumar \ Desktop \ test.sql FEHLER: Fehler beim Öffnen der Datei '\ home \ sivakumar \ Desktop \ test.sql', Fehler: 2

Irgendeine Idee, was ich falsch mache?

user1160432
quelle
Grundsätzlich denke ich, dass dies hier die Antwort sein sollte: \. /home/sivakumar/Desktop/test.sql
Talsibony

Antworten:

433

Wenn Sie sich in der MySQL-Befehlszeile befinden, müssen mysql>Sie die SQL-Datei als deklarieren source.

mysql> source \home\user\Desktop\test.sql;
Thomas Edwards
quelle
29
Für MySQL 5.6.10 unter Mac sind keine einfachen Anführungszeichen für den Dateipfad erforderlich.
RNA
3
Für Windows funktionierte die Verwendung von '/' anstelle von '\' für mich korrekt. Ich habe Fehler erhalten, als ich ursprünglich '/' verwendet habe. Das hat bei mir funktioniert ... Quelle C: /Users/macombers/Downloads/midcoast_db.sql;
Zack Macomber
Löschen Sie die Anführungszeichen auch auf Ubuntu (MySQL Ver 14.14 Debian-Linux-Gnu (x86_64) mit EditLine Wrapper)
Siddhartha
1
@kapil Relativ zu was? Sie befinden sich zu diesem Zeitpunkt in MySQL, daher gibt es leider keinen Verwandten.
Thomas Edwards
1
@Sarah Sie können \ vor dem Leerzeichen verwenden oder den Dateinamen mit einschließen ".
Thomas Edwards
165

Sie haben viele Möglichkeiten:

  • Verwenden Sie den MySQL-Befehlszeilenclient: mysql -h hostname -u user database < path/to/test.sql
  • Installieren Sie die MySQL-GUI-Tools, öffnen Sie Ihre SQL-Datei und führen Sie sie aus
  • Verwenden Sie phpmysql, wenn die Datenbank über Ihren Webserver verfügbar ist
Eugen Rieck
quelle
3
Was ist mit dem Passwort des Benutzers (Option -p)?
Amir Katz
@AmirKatz Obwohl das Kennwort mit der -pOption angegeben werden kann, wird dies nicht empfohlen: Andere Benutzer auf demselben Host können psin diesem Fall Systemtools verwenden , die es gerne lesen.
Eugen Rieck
1
@ EugenRieck -pohne Argument fordert zur Eingabe des Passworts in der nächsten Zeile auf
Bobby Jack
130

Mit dem folgenden Befehl können Sie MySQL-Anweisungen ausführen, die in eine Textdatei geschrieben wurden:

mysql -u yourusername -p yourpassword yourdatabase < text_file

Wenn Ihre Datenbank noch nicht erstellt wurde, melden Sie sich zuerst bei MySQL an, indem Sie:

mysql -u yourusername -p yourpassword yourdatabase

dann:

mysql>CREATE DATABASE a_new_database_name

dann:

mysql -u yourusername -p yourpassword a_new_database_name < text_file

das sollte es tun!

Weitere Informationen finden Sie hier: http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html

Paul Preibisch
quelle
7
unter Windows: Für das Passwort musste ich Anführungszeichen und KEIN Leerzeichen verwenden, damit es funktioniert (das Passwort selbst enthielt keine Leerzeichen oder Sonderzeichen):mysql -u yourusername -p"yourpassword"
TmTron
1
Wenn Sie nicht möchten, dass Ihr Passwort in der Eingabeaufforderung angezeigt wird, funktioniert die hier beschriebene Methode meiner Meinung nach: stackoverflow.com/questions/9293042/…
alex9311
58

Meine Lieblingsoption dafür ist:

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

Ich benutze es so, weil Sie, wenn Sie es mit "" bespannen, falsche Pfade und Fehler mit Leerzeichen und - und wahrscheinlich mehr Probleme mit Zeichen vermeiden, auf die ich nicht gestoßen bin.


Mit @ elcuco Kommentar schlage ich vor, diesen Befehl mit [Leerzeichen] vorher zu verwenden, damit bash angewiesen wird, das Speichern im Verlauf zu ignorieren. Dies funktioniert in den meisten bash sofort.

Falls Ihr Befehl dennoch im Verlauf gespeichert wird, sehen Sie sich bitte die folgenden Lösungen an:

Führen Sie den Befehl aus, ohne ihn im Verlauf zu behalten


zusätzliche Sicherheitsbearbeitung

Nur für den Fall, dass Sie besonders sicher sein möchten, können Sie den folgenden Befehl verwenden und das Kennwort in die Befehlszeileneingabe eingeben:

mysql --user="username" --database="databasename" -p < "filepath"
Talsibony
quelle
18
Ich würde nicht empfehlen, das Passwort an die Befehlszeile zu übergeben, da es in der ~ / .bash_history gespeichert wird und von anderen Programmen über / proc / aufgerufen werden kann.
Elcuco
Exzellenter Rat von @elcuco! Verwenden Sie wahrscheinlich auch ein anderes Flag nach -p (oder haben Sie das letzte Argument), damit ein anderer Parameter nicht fälschlicherweise als beabsichtigtes Kennwort verwendet wird.
Davernator
Bitte beachten Sie, dass Befehlszeilenargumente für andere Benutzer weiterhin sichtbar sind. Beispiel: für i in / proc / * / cmdline; Echo $ i; Katze $ i; fertig
elcuco
Dies ist KEINE
Wiederaufnahme,
@AlexiusDiakogiannis Können Sie mir ein Beispiel geben, wie Sie den Befehl aus dem Verlauf anzeigen können, wenn Sie ihn mit [Leerzeichen] vor dem Befehl ausführen?
Talsibony
56

Alle Top-Antworten sind gut. Aber nur für den Fall, dass jemand die Abfrage von einer Textdatei auf einem Remote-Server ausführen UND die Ergebnisse in einer Datei speichern möchte (anstatt sie auf der Konsole anzuzeigen), können Sie Folgendes tun:

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

Hoffe das hilft jemandem.

Bhushan
quelle
10
Ich denke, es sollte kein Leerzeichen zwischen -pund dem Passwort sein
webNeat
Wenn der Zweck des Schreibens in eine Datei darin besteht, einen Datendump zu erstellen, ist dies meiner Meinung nach SELECT ... INTO OUTFILE /path/to/file.csveffizienter. Siehe Optionen und Syntax hier - dev.mysql.com/doc/refman/5.7/en/select-into.html
Anis
20

Geben Sie den Pfad der SQL-Datei wie folgt an:

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

Siehe im Bild:

Shubham Verma
quelle
Danke vielmals! Dies funktioniert auch, wenn Ihr Benutzer keine SUDO-Rechte hat und auf Remote Amazon RDS
Volatil3
20

Ich bin hierher gekommen, um nach dieser Antwort zu suchen, und hier ist, was ich gefunden habe, am besten für mich funktioniert: Hinweis Ich verwende Ubuntu 16.xx.

  1. Greifen Sie auf MySQL zu, indem Sie:

mysql -u <your_user> - p

  1. Geben Sie an der MySQL-Eingabeaufforderung Folgendes ein:

source file_name.sql

Hoffe das hilft.

Zac Smith
quelle
2
Anstatt die Eingabeaufforderung zu starten, kann es sogar nützlich sein, die beiden Schritte in einem einzigen Befehl zu kombinieren:mysql -u<user> -p -e 'source filename.sql'
Junix
Danke, @junix! Die Quelle Option auf diese Weise verwendet , ist das, was ich suchte.
ManuelJE
14
mysql> source C:\Users\admin\Desktop\fn_Split.sql

Geben Sie keine einfachen Anführungszeichen an.

Wenn der obige Befehl nicht funktioniert, kopieren Sie die Datei auf Laufwerk c: und versuchen Sie es erneut. Wie nachfolgend dargestellt,

mysql> source C:\fn_Split.sql
Shankar Kalyankar
quelle
13

Es ist niemals eine gute Praxis, das Kennwortargument direkt über die Befehlszeile zu übergeben. Es wird in der ~/.bash_historyDatei gespeichert und kann von anderen Anwendungen aus aufgerufen werden.

Verwenden Sie stattdessen Folgendes:

mysql -u user --host host --port 9999 database_name < /scripts/script.sql -p
Enter password:
Jorge E. Hernández
quelle
10
mysql -uusername -ppassword database-name < file.sql
Мартин Петров
quelle
9

Sehr wahrscheinlich müssen Sie nur den Schrägstrich / Blackslash ändern: von

 \home\sivakumar\Desktop\test.sql

zu

 /home/sivakumar/Desktop/test.sql

Der Befehl wäre also:

source /home/sivakumar/Desktop/test.sql
Ben Lin
quelle
6

Verwenden Sie Folgendes an der MySQL-Eingabeaufforderung :

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

Verwenden Sie kein Zitat. Auch wenn der Pfad Leerzeichen ('') enthält, verwenden Sie überhaupt kein Anführungszeichen .

Rajesh Paul
quelle
5

Anstelle einer Umleitung würde ich Folgendes tun

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

Dadurch wird der Dateipfad zur SQL-Datei ausgeführt

DataGuru
quelle
5

So viele Möglichkeiten, es zu tun.

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

Wenn Sie Fehler über die Befehlszeile erhalten, stellen Sie sicher, dass Sie zuvor ausgeführt haben

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

Dies muss im Verzeichnis mysqld.exe ausgeführt werden, daher die CD.

Hoffe das ist hilfreich und nicht nur überflüssig.

DonkeyKong
quelle
3

Da mysql -u yourusername -p yourpassword yourdatabase < text_filehat auf einem Remote-Server (Amazon EC2) nicht funktioniert ...

Stellen Sie sicher, dass die Datenbank zuerst erstellt wird.

Dann:

mysql --host=localhost --user=your_username --password=your_password your_database_name < pathTofilename.sql
Damir Olejar
quelle
3

Als zukünftige Referenz habe ich festgestellt, dass dies im Vergleich zu den oben genannten Methoden unter Windows in Ihrer MSQL-Konsole funktioniert:

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

Wenn Ihr Root-Laufwerk nicht "c" heißt, tauschen Sie es einfach mit dem aus, was Ihr Laufwerk heißt. Versuchen Sie zuerst Backslashes. Wenn sie nicht funktionieren, versuchen Sie es mit dem Forward Slash. Wenn sie auch nicht funktionieren, stellen Sie sicher, dass Sie Ihren vollständigen Dateipfad und die Erweiterung .sql für den Dateinamen haben. Wenn Ihre Version auf Semikolons besteht, stellen Sie sicher, dass dieser vorhanden ist, und versuchen Sie es erneut.

Chad Mx
quelle
0

Ich hatte diesen Fehler und versuchte alle Ratschläge, die ich bekommen konnte, ohne Erfolg.

Schließlich war das Problem, dass mein Ordner ein Leerzeichen im Ordnernamen hatte, das als Schrägstrich im Ordnerpfad angezeigt wurde. Sobald ich es gefunden und entfernt hatte, funktionierte es einwandfrei.

user3753416
quelle