Ich lerne MySQL und habe versucht, eine LOAD DATA
Klausel zu verwenden. Als ich es wie folgt benutzte:
LOAD DATA INFILE "text.txt" INTO table mytable;
Ich habe folgenden Fehler erhalten:
Der MySQL-Server wird mit der Option --secure-file-priv ausgeführt, sodass diese Anweisung nicht ausgeführt werden kann
Wie gehe ich diesen Fehler an?
Ich habe eine andere Frage in derselben Fehlermeldung überprüft , kann aber immer noch keine Lösung finden.
Ich benutze MySQL 5.6
mysqldump --tab
, als ob es nicht schwierig genug wäre, Ihre eigenen Daten aus MySQL herauszuholen.LOAD DATA LOCAL INFILE ...
Antworten:
Es funktioniert wie beabsichtigt. Ihr MySQL-Server wurde mit der Option --secure-file-priv gestartet, die im Grunde begrenzt, aus welchen Verzeichnissen Sie Dateien laden können
LOAD DATA INFILE
.Sie können verwenden
SHOW VARIABLES LIKE "secure_file_priv";
, um das konfigurierte Verzeichnis anzuzeigen.Sie haben zwei Möglichkeiten:
secure-file-priv
.secure-file-priv
. Dies muss vom Start entfernt werden und kann nicht dynamisch geändert werden. Überprüfen Sie dazu Ihre MySQL-Startparameter (je nach Plattform) und my.ini.quelle
--secure-file-priv
selbstSHOW VARIABLES LIKE "secure_file_priv";
Ich hatte das gleiche Problem. Ich habe es endlich mit der
LOCAL
Option im Befehl gelöstLOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;
Weitere Informationen finden Sie hier http://dev.mysql.com/doc/refman/5.7/en/load-data.html
quelle
C:\ProgramData\MySQL\MySQL Server 5.7\Uploads
, 2. Deaktivierensecure_file_priv
inmy.ini
und Neustarten mysql 3. Dieser! Danke :)--local-infile
Flag beim Ausführen hinzuzufügenmysql
. stackoverflow.com/questions/10762239/…The used command is not allowed with this MySQL version
von MySQL 8.0Unter Ubuntu 14 und MySQL 5.5.53 scheint diese Einstellung standardmäßig aktiviert zu sein. Um es zu deaktivieren, müssen Sie es
secure-file-priv = ""
unter der Konfigurationsgruppe mysqld zu Ihrer Datei my.cnf hinzufügen . z.B:-quelle
# secure-file-priv = ~
, tritt immer noch der Fehler auf, da der Wert aufNULL
diese Weise angezeigt wird. Dadurch wird das Problem behoben, wenn Sie auswählen möchten, in welche Verzeichnisse Sie auf dem Server exportieren können usw.Ich arbeite an MySQL5.7.11 unter Debian. Der Befehl, mit dem ich das Verzeichnis sehen konnte, lautet:
quelle
SHOW VARIABLES LIKE "secure_file_priv";
bekomme ichERROR 1146 (42S02): Table 'performance_schema.session_variables' doesn't exist
was auch unter anderen Umständen geworfen wird und ich werde mich irgendwann darum kümmern müssen. DerSELECT @@global.secure_file_priv;
Befehl ergab jedoch das erwartete Ergebnis.Folgendes hat in Windows 7 funktioniert, um es zu deaktivieren
secure-file-priv
(Option 2 aus der Antwort von vhu ):services.msc
.C:\ProgramData\MySQL\MySQL Server 5.6
(ProgramData
war in meinem Fall ein versteckter Ordner).my.ini
Datei im Editor.secure-file-priv=""
services.msc
.quelle
Wenn die Datei lokal auf Ihrem Computer ist, verwenden Sie LOCAL in Ihrem Befehl
quelle
@vhu
Ich tat das
SHOW VARIABLES LIKE "secure_file_priv";
und es kehrte zurückC:\ProgramData\MySQL\MySQL Server 8.0\Uploads\
Als ich das einsteckte, funktionierte es immer noch nicht.Als ich direkt zur Datei my.ini ging, stellte ich fest, dass der Pfad etwas anders formatiert ist:
C:/ProgramData/MySQL/MySQL Server 8.0/Uploads
Dann, als ich es damit lief, funktionierte es. Der einzige Unterschied ist die Richtung der Schrägstriche.
quelle
Ich hatte das gleiche Problem mit 'Secure-File-Priv'. Das Kommentieren in der INI-Datei funktionierte nicht und das Verschieben der Datei in das durch 'Secure-File-Priv' angegebene Verzeichnis auch nicht.
Schließlich funktionierte es, wie von dbc vorgeschlagen, 'Secure-File-Priv' gleich einer leeren Zeichenfolge zu machen. Wenn also jemand feststeckt, nachdem er die obigen Antworten ausprobiert hat, hilft dies hoffentlich.
quelle
Das, was bei mir funktioniert hat:
secure-file-priv
.So finden Sie diesen Typ:
local_infile = 1
.Mach das tippen:
Wenn du bekommst:
Stellen Sie dann eine Eingabe ein:
quelle
Dieser Thread wurde zum Zeitpunkt dieses Beitrags 522.000 Mal angesehen . Ehrlich gesagt, wann wurde MySQL unsere übermäßig schützende, unvernünftige Mutter ? Was für ein zeitaufwändiger Sicherheitsversuch - der uns wirklich nur fesselt!
Nach vielen Suchen und vielen Versuchen schlug alles fehl.
Meine Lösung:
quelle
Ich hatte alle möglichen Probleme damit. Ich habe my.cnf und alle möglichen verrückten Dinge geändert, die andere Versionen dieses Problems zu zeigen versuchten.
Was hat bei mir funktioniert:
Der Fehler, den ich bekam
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
Ich konnte das Problem beheben, indem ich /usr/local/mysql/support-files/mysql.server öffnete und die folgende Zeile änderte:
zu
quelle
Wenn Sie unter Ubuntu arbeiten, müssen Sie möglicherweise auch Apparmor konfigurieren, damit MySQL in Ihren Ordner schreiben kann. Beispiel: Hier ist meine Konfiguration:
Fügen Sie diese Zeile zur Datei /etc/apparmor.d/usr.sbin.mysqld hinzu:
Fügen Sie dann diese beiden Konfigurationszeilen zu den Abschnitten /etc/mysql/my.cnf hinzu:
Hier ist mein SQL:
Es hat bei mir funktioniert. Viel Glück!
quelle
Für MySQL 8.0 können Sie dies tun:
Es hat bei mir auf Mac High Sierra funktioniert
quelle
Ich habe ein NodeJS-Importskript erstellt, wenn Sie nodeJS ausführen und Ihre Daten in der folgenden Form vorliegen (doppeltes Anführungszeichen + Komma und \ n neue Zeile).
Dieser ist so konfiguriert, dass er unter http: // localhost: 5000 / import ausgeführt wird .
Ich gehe Zeile für Zeile und erstelle eine Abfragezeichenfolge
server.js
ImportRoutes.js
db.js ist die Konfigurationsdatei
Haftungsausschluss: Dies ist keine perfekte Lösung. Ich veröffentliche sie nur für Entwickler, die sich unter einer Zeitachse befinden und viele Daten importieren müssen und auf dieses lächerliche Problem stoßen. Ich habe viel Zeit verloren und hoffe, einem anderen Entwickler die gleiche verlorene Zeit zu ersparen.
quelle
Ich hatte dieses Problem unter Windows 10. "--secure-file-priv in MySQL" Um dies zu lösen, habe ich Folgendes getan.
Der Server wurde wie erwartet gestartet.
quelle
MySQL verwendet diese Systemvariable, um zu steuern, wo Sie Ihre Dateien importieren können
Das Problem ist also, wie man Systemvariablen wie ändert
secure_file_priv
.mysqld
sudo mysqld_safe --secure_file_priv=""
Jetzt sehen Sie vielleicht so:
quelle
Bei macOS Catalina habe ich diese Schritte ausgeführt
secure_file_priv
1. Beenden Sie den MySQL-Dienst
2. Starten Sie MYSQL neu, indem Sie die Systemvariablen --secure_file_priv zuweisen
Hinweis: Durch Hinzufügen eines leeren Werts wird das Problem für mich behoben, und MYSQL exportiert Daten in das Verzeichnis / usr / local / mysql / data / YOUR_DB_TABLE / EXPORT_FILE
Vielen Dank
quelle
Ohne die Konfigurationsdateien zu ändern.
secure_file_priv
Suchen Sie nach dem Wert der Verwendung des von @vhu geposteten Befehls:SHOW VARIABLES LIKE "secure_file_priv"
.select * from table into outfile 'secure_file_priv_PATH/OUTPUT-FILE' ... rest of your query
Dies funktionierte für meine in MySQL-Shell auf Ubuntu 18.04 LTS MySQL 5.7.29
quelle