MySQL kann den Parameter into outfile verwenden, um die Daten in der Tabelle nach csv zu exportieren. Beispielsweise kann der folgende Befehl verwendet werden, um die Daten der Benutzertabelle nach user.csv zu exportieren
select * from user into outfile '/tmp/user.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n
Nach der Ausführung werden die Daten der Benutzertabelle nach /tmp/user.csv exportiert.
Parameterbeschreibung:
in die Ausgabedatei „Exportiertes Verzeichnis und Dateiname“
Geben Sie das exportierte Verzeichnis und den Dateinamen an
Felder abgeschlossen durch „Feldtrennzeichen“
Definieren Sie das Trennzeichen zwischen Feldern
optional eingeschlossen durch „Feldtrennzeichen“
Definieren Sie die Zeichen, die das Feld umgeben ( Numerische Felder sind ungültig )
Zeilen, die durch „Zeilentrennzeichen“ abgeschlossen werden
Definieren Sie das Trennzeichen für jede Zeile
Problemanalyse
Oben Der Befehl läuft ohne Probleme unter mysql5.6, aber der folgende Fehler tritt auf, wenn es unter mysql5.7 ausgeführt wird.
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
Sehen Sie sich die offizielle Dokumentation an. Der Parameter secure_file_priv wird verwendet, um das angegebene Verzeichnis einzuschränken, an das LOAD DATA, SELECT …OUTFILE, LOAD_FILE() übergeben wird.
secure_file_priv ist NULL, was darauf hinweist, dass mysqld vom Import oder Export ausgeschlossen ist.
Wenn secure_file_priv /tmp ist, bedeutet dies, dass mysqld nur auf die Durchführung von Importen und Exporten im Verzeichnis /tmp beschränkt ist und diese nicht in anderen Verzeichnissen ausführen kann.
secure_file_priv Wenn kein Wert vorhanden ist bedeutet dies, dass mysqld nicht auf den Import und Export in beliebige Verzeichnisse beschränkt ist.
Sehen Sie sich den Wert von secure_file_priv an. Der Standardwert ist NULL, was bedeutet, dass die Einschränkung nicht importiert oder exportiert werden kann.
mysql> show global variables like '%secure_file_priv%'; +------------------+-------+| Variable_name | Value | +------------------+-------+| secure_file_priv | NULL | +------------------+-------+1 row in set (0.00 sec)
Da der Parameter secure_file_priv ein schreibgeschützter Parameter ist und nicht mit dem Befehl „set global“ geändert werden kann.
mysql> set global secure_file_priv=''; ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable
Lösung
Öffnen Sie my.cnf oder my.ini, fügen Sie die folgende Anweisung hinzu und starten Sie MySQL neu.
secure_file_priv=''
Den geänderten Wert von secure_file_priv anzeigen
mysql> show global variables like '%secure_file_priv%'; +------------------+-------+| Variable_name | Value | +------------------+-------+| secure_file_priv | | +------------------+-------+1 row in set (0.00 sec)
Nach der Änderung erneut ausführen und erfolgreich exportieren.
';
Nach der Ausführung werden die Daten der Benutzertabelle nach /tmp/user.csv exportiert.
Parameterbeschreibung:
in die Ausgabedatei „Exportiertes Verzeichnis und Dateiname“
Geben Sie das exportierte Verzeichnis und den Dateinamen an
Felder abgeschlossen durch „Feldtrennzeichen“
Definieren Sie das Trennzeichen zwischen Feldern
optional eingeschlossen durch „Feldtrennzeichen“
Definieren Sie das Zeichen, das das Feld umgibt ( Numerische Felder sind ungültig)
Zeilen, die durch „Interline-Trennzeichen“ abgeschlossen werden
Definieren Sie das Trennzeichen für jede Zeile
Problemanalyse
Oben Der Befehl wird ohne Probleme ausgeführt unter mysql5.6, aber der folgende Fehler tritt auf, wenn er unter mysql5.7 ausgeführt wird.
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
Sehen Sie sich die offizielle Dokumentation an. Der Parameter secure_file_priv wird verwendet, um einzuschränken, an welches angegebene Verzeichnis LOAD DATA, SELECT …OUTFILE, LOAD_FILE() übergeben wird. Wenn
secure_file_priv NULL ist, bedeutet dies, dass mysqld vom Import oder Export ausgeschlossen ist.
Wenn secure_file_priv /tmp ist, bedeutet dies, dass mysqld nur auf die Ausführung von Import und Export im Verzeichnis /tmp beschränkt ist und es nicht in anderen Verzeichnissen ausführen kann.
secure_file_priv Wenn kein Wert vorhanden ist bedeutet dies, dass mysqld nicht auf den Import und Export in beliebige Verzeichnisse beschränkt ist.
Sehen Sie sich den Wert von secure_file_priv an. Der Standardwert ist NULL, was bedeutet, dass die Einschränkung nicht importiert oder exportiert werden kann.
mysql> show global variables like '%secure_file_priv%'; +------------------+-------+| Variable_name | Value | +------------------+-------+| secure_file_priv | NULL | +------------------+-------+1 row in set (0.00 sec)
Da der Parameter secure_file_priv ein schreibgeschützter Parameter ist und nicht mit dem Befehl „set global“ geändert werden kann.
mysql> set global secure_file_priv=''; ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable
Lösung
Öffnen Sie my.cnf oder my.ini, fügen Sie die folgende Anweisung hinzu und starten Sie MySQL neu.
secure_file_priv=''
Den geänderten Wert von secure_file_priv anzeigen
mysql> show global variables like '%secure_file_priv%'; +------------------+-------+| Variable_name | Value | +------------------+-------+| secure_file_priv | | +------------------+-------+1 row in set (0.00 sec)
Nach der Änderung erneut ausführen und erfolgreich exportieren.
mysql> select * from user into outfile '/tmp/user.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n'; Query OK, 15 rows affected (0.00 sec)
Das obige ist der detaillierte Inhalt vonMysql5.7-Exportdaten-Eingabeaufforderung --secure-file-priv-Option Problemlösung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!