Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fehlercode:1290. Der MySQL-Server wird mit der Option --secure-file-priv ausgeführt, sodass er diese Anweisung nicht ausführen kann

Eine schnelle Antwort, bei der Sie keine Konfigurationsdateien bearbeiten müssen (und auf anderen Betriebssystemen sowie unter Windows funktioniert), besteht darin, einfach das Verzeichnis zu finden, in dem Sie speichern dürfen, indem Sie Folgendes verwenden:

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.06 sec)

Und stellen Sie dann sicher, dass Sie dieses Verzeichnis in Ihrem SELECT verwenden INTO OUTFILE der Anweisung Klausel:

SELECT *
FROM xxxx
WHERE XXX
INTO OUTFILE '/var/lib/mysql-files/report.csv'
    FIELDS TERMINATED BY '#'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'

Originalantwort

Ich habe das gleiche Problem seit dem Upgrade von MySQL 5.6.25 auf 5.6.26.

In meinem Fall (unter Windows) zeigt mir ein Blick auf den MySQL56-Windows-Dienst, dass die Options-/Einstellungsdatei, die beim Start des Dienstes verwendet wird, C:\ProgramData\MySQL\MySQL Server 5.6\my.ini

Unter Linux sind die beiden häufigsten Speicherorte /etc/my.cnf oder /etc/mysql/my.cnf .

Wenn ich diese Datei öffne, kann ich sehen, dass die Datei secure-file-priv Option wurde unter [mysqld] hinzugefügt Gruppe in dieser neuen Version von MySQL Server mit einem Standardwert:

secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.6/Uploads"

Sie könnten dies kommentieren (wenn Sie sich in einer Nicht-Produktionsumgebung befinden) oder mit dem Ändern der Einstellung experimentieren (vor kurzem musste ich secure-file-priv ="" festlegen um die Standardeinstellung zu deaktivieren). Vergessen Sie nicht, den Dienst neu zu starten, nachdem Sie Änderungen vorgenommen haben.

Alternativ können Sie versuchen, Ihre Ausgabe im zulässigen Ordner zu speichern (der Speicherort kann je nach Installation variieren):

SELECT *
FROM xxxx
WHERE XXX
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.6/Uploads/report.csv'
    FIELDS TERMINATED BY '#'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'

Es ist üblicher, kommagetrennte Werte mit FIELDS TERMINATED BY ',' zu verwenden . Siehe unten für ein Beispiel (das auch einen Linux-Pfad zeigt):

SELECT *
FROM table
INTO OUTFILE '/var/lib/mysql-files/report.csv'
    FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    ESCAPED BY ''
    LINES TERMINATED BY '\n';