it-swarm.com.de

Wie gehe ich mit --secure-file-priv in MySQL um?

Ich lerne MySQL und habe versucht, eine LOAD DATA -Klausel zu verwenden. Als ich es wie folgt benutzt habe:

LOAD DATA INFILE "text.txt" INTO table mytable;

Ich habe folgende Fehlermeldung erhalten:

Der MySQL-Server wird mit der Option --secure-file-priv ausgeführt, daher kann er diese Anweisung nicht ausführen

Wie gehe ich diesen Fehler an?

Ich habe eine weitere Frage zur selben Fehlermeldung überprüft, kann aber immer noch keine Lösung finden.

Ich benutze MySQL 5.6

286
Mohit Bhasi

Es funktioniert wie beabsichtigt. Ihr MySQL-Server wurde mit der Option - secure-file-priv gestartet, die grundsätzlich einschränkt, aus welchen Verzeichnissen Sie Dateien mit LOAD DATA INFILE laden können.

Sie können SHOW VARIABLES LIKE "secure_file_priv"; verwenden, um das konfigurierte Verzeichnis anzuzeigen.

Sie haben zwei Möglichkeiten:

  1. Verschieben Sie Ihre Datei in das mit secure-file-priv angegebene Verzeichnis.
  2. Deaktiviere secure-file-priv. Dies muss aus dem Start entfernt werden und kann nicht dynamisch geändert werden. Überprüfen Sie dazu Ihre MySQL-Startparameter (plattformabhängig) und my.ini.
383
vhu

Ich hatte das gleiche Problem. Ich habe es schließlich mit der Option LOCAL im Befehl gelöst

LOAD 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

Wenn LOCAL angegeben ist, wird die Datei vom Client-Programm auf dem Client-Host gelesen und an den Server gesendet. Die Datei kann als vollständiger Pfadname angegeben werden, um den genauen Speicherort anzugeben. Bei Angabe eines relativen Pfadnamens wird der Name relativ zu dem Verzeichnis interpretiert, in dem das Client-Programm gestartet wurde.

204
Staza

Unter Ubuntu 14 und MySQL 5.5.53 scheint diese Einstellung standardmäßig aktiviert zu sein. Um es zu deaktivieren, müssen Sie secure-file-priv = "" zu Ihrer my.cnf-Datei unter der mysqld-Konfigurationsgruppe hinzufügen. z.B:-

[mysqld]
secure-file-priv = ""
98
Mustafa

Ich arbeite an MySQL5.7.11 unter Debian. Der Befehl, mit dem ich das Verzeichnis sehen konnte, war:

mysql> SELECT @@global.secure_file_priv;
31
Carlos Med

Wenn die Datei lokal für Ihren Computer ist, verwenden Sie LOCAL in Ihrem Befehl

LOAD DATA LOCAL INFILE "text.txt" INTO table mytable;
19
garyrgilbert

In Windows 7 funktionierte Folgendes, um secure-file-priv zu deaktivieren (Option 2 von vhus Antwort ):

  1. Beenden Sie den MySQL-Serverdienst, indem Sie services.msc aufrufen.
  2. Gehe zu C:\ProgramData\MySQL\MySQL Server 5.6 (ProgramData war in meinem Fall ein versteckter Ordner).
  3. Öffnen Sie die my.ini -Datei im Editor.
  4. Suchen Sie nach 'secure-file-priv'.
  5. Kommentieren Sie den Zeilenausgang, indem Sie am Zeilenanfang ein '#' hinzufügen. Für MySQL Server 5.7.16 und höher funktioniert das Kommentieren nicht. Sie müssen eine leere Zeichenfolge wie diese eingeben - secure-file-priv=""
  6. Speicher die Datei.
  7. Starten Sie den MySQL-Serverdienst, indem Sie services.msc aufrufen.
15
Ramnath

@vhu

Ich habe den SHOW VARIABLES LIKE "secure_file_priv"; gemacht und er hat C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ zurückgegeben. Als ich ihn eingesteckt habe, hat er immer noch nicht funktioniert.

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 damit angefangen habe, hat es funktioniert. Der einzige Unterschied ist die Richtung der Schrägstriche.

9
wolfsshield

Ich hatte das gleiche Problem mit "Secure-File-Priv". Das Kommentieren in der INI-Datei funktionierte nicht und das Verschieben der Datei in ein Verzeichnis, das durch 'secure-file-priv' angegeben wurde, nicht.

Wie dbc vorschlug, funktionierte es schließlich, 'secure-file-priv' einer leeren Zeichenfolge gleichzusetzen. Wenn also jemand feststeckt, nachdem er die obigen Antworten ausprobiert hat, hilft dies hoffentlich.

7
Rsc Rsc

Das, was bei mir funktioniert hat:

  1. Legen Sie Ihre Datei in den in secure-file-priv angegebenen Ordner.

So finden Sie diesen Typ:

mysql> zeige Variablen wie "secure_file_priv";


  1. Überprüfen Sie, ob Sie local_infile = 1 haben.

Mach diese Eingabe:

mysql> zeige Variablen wie "local_infile";

Wenn du bekommst:

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | OFF   |
+---------------+-------+

Dann setzen Sie es auf eine Eingabe:

mysql> set global local_infile = 1;


  1. Geben Sie den vollständigen Pfad für Ihre Datei an. In meinem Fall:

mysql> lade die Datei "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.txt" in den Tabellentest;

4
Vinícius Souza

Ich hatte alle möglichen Probleme damit. Ich änderte meine.cnf und alle möglichen verrückten Dinge, die andere Versionen dieses Problems zu zeigen versuchten.

Was hat bei mir funktioniert:

Den Fehler habe ich bekommen

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 öffne und die folgende Zeile ändere:

$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" -- $other_args >/dev/null &
  wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?

zu

$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --secure-file-priv="" $other_args >/dev/null &
  wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
3
notthehoff

Ich hatte dieses Problem unter Windows 10. "--secure-file-priv in MySQL" Um dies zu lösen, habe ich Folgendes getan.

  1. In der Windows-Suche (unten links) habe ich "Powershell" eingegeben.
  2. Mit der rechten Maustaste auf Powershell geklickt und als Administrator ausgeführt.
  3. Navigierte zur Server-Bin-Datei. (C:\Programme\MySQL\MySQL Server 5.6\bin);
  4. Eingegeben ./mysqld
  5. Drücke Enter"

Der Server wurde wie erwartet gestartet.

1
Jason Allshorn

Wenn Sie mit Ubuntu arbeiten, müssen Sie möglicherweise auch Apparmor so konfigurieren, dass MySQL in Ihren Ordner schreiben kann, z. Hier ist meine Konfiguration:

Fügen Sie diese Zeile in die Datei /etc/apparmor.d/usr.sbin.mysqld ein:

/var/lib/mysql-files/* rw

Fügen Sie dann diese 2 Konfigurationszeilen zu den Abschnitten /etc/mysql/my.cnf hinzu:

[client]
loose-local-infile = 1

[mysqld]
secure-file-priv = ""

Hier ist mein SQL:

select id from blahs into outfile '/var/lib/mysql-files/blahs';

Es hat bei mir funktioniert. Viel Glück!

1

MySQL verwendet diese Systemvariable, um zu steuern, wo Sie Ihre Dateien importieren können

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+

Das Problem ist also, wie man Systemvariablen wie secure_file_priv ändert.

  1. herunterfahren mysqld
  2. Sudo mysqld_safe --secure_file_priv=""

jetzt siehst du vielleicht so:

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
1
bitfishxyz

Für die Version 8.0 von MySQL können Sie dies tun:

  1. mysql.server stoppen
  2. mysql.server start --secure-file-priv = ''

Es funktionierte für mich auf Mac High Sierra

0
Ruslan Krupenko