web-dev-qa-db-fra.com

MySQL exportant INTO OUTFILE - erreur de sécurité-fichier-priv lors de l'utilisation du répertoire set

J'essaie d'exécuter ce qui suit sur une base de données MySQL:

SELECT * FROM mysql.db
INTO OUTFILE "C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\db.csv"
FIELDS TERMINATED BY '|'
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

Je reçois l'erreur:

SQL Error (1290): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

Lorsque j'exécute ce qui suit:

mysql> SELECT @@secure_file_priv;

Je reçois:

+------------------------------------------------+
| @@secure_file_priv                             |
+------------------------------------------------+
| C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\ |
+------------------------------------------------+

Alors pourquoi n'exporte-t-il pas le fichier même si j'utilise l'emplacement set --secure-file-priv?

Je suis habitué à MSSQL et nouveau à MySQL.

9
Lateralus

Argh. C'était une faute de frappe, mes\auraient dû être /

Donc, ma requête est maintenant la suivante:

SELECT * FROM   mysql.db INTO OUTFILE "C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/db_pipe.csv" FIELDS TERMINATED BY '|' ENCLOSED BY '"'  LINES TERMINATED BY '\n';
9
Lateralus

Il est important d'utiliser l'emplacement du chemin mentionné dans:

mysql> SELECT @@secure_file_priv;

Si vous utilisez un emplacement de chemin personnalisé, vous obtiendrez toujours cette erreur. Comme mentionné par Lateralus, n'oubliez pas de changer le chemin vers les barres obliques.

15
Sayali Sonawane

Cela a fonctionné pour moi. Il a besoin d'une double barre oblique inverse et si vous essayez des outils entre les deux pour vous connecter à mysql, ajoutez simplement des caractères d'échappement.

SELECT * 
      INTO OUTFILE 'C:\\\\ProgramData\\\\MySQL\\\\MySQL Server 8.0\\\\Uploads\\\\employees.txt'
        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
        LINES TERMINATED BY '\n'
      FROM employees;
0
PRITISH

Dans mon cas (Windows):

  1. Dans my.ini, définissez secure_file_priv=""

  2. Utilisez une double barre oblique dans le chemin comme ci-dessous:

SELECT description, comment FROM usecase
INTO OUTFILE 'C:\\tmp\\usecase0.csv' 
FIELDS ENCLOSED BY '"' 
TERMINATED BY ';' 
ESCAPED BY '"' 
LINES TERMINATED BY '\r\n';
0
mdivk