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.
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';
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.
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;
Dans mon cas (Windows):
Dans my.ini, définissez secure_file_priv=""
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';