web-dev-qa-db-fra.com

erreur "--secure-file-priv option" lors de l'enregistrement de la sélection sur csv

J'essaie d'enregistrer une très grande sélection (plus de 70 millions de lignes dans un fichier csv) sur le serveur Win 2012 R2

J'exécute la requête en tant que root, mais je pense qu'il y a toujours un problème avec les privilèges

select * 
INTO OUTFILE 'D:\my_folder\my_file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
from my_table
where 
...

Erreur

Code d'erreur: 1290. Le serveur MySQL s'exécute avec l'option --secure-file-priv, il ne peut donc pas exécuter cette instruction

Merci d'avance pour toute aide !

4
Toren

Sur Win2012, j'ai trouvé le fichier my.ini.

Dans le fichier, il y a une définition de secure_file_priv - un dossier où je peux télécharger ou télécharger depuis,

Je modifie donc ma requête comme suit:

 SELECT * 
 INTO OUTFILE 'D:\<folder_defined_as_secure_file_priv>\my_file.csv'
 FIELDS TERMINATED BY ','
 ENCLOSED BY '"'
 LINES TERMINATED BY '\n'
 FROM my_table
 WHERE 
 ...
1
Toren

J'utilise MySQL Server 8.0 sur Windows 10. J'ai essayé de charger des données à partir du fichier csv en utilisant les commandes suivantes:

LOAD DATA INFILE 'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\World_cup_dataset.csv'
INTO TABLE trial
FIELDS TERMINATED BY ',';

Lorsque je lance au-dessus des commandes, j'ai

"ERREUR 1290 (HY000): le serveur MySQL fonctionne avec l'option --secure-file-priv, il ne peut donc pas exécuter cette instruction"

J'ai essayé de nombreuses méthodes pour résoudre le problème. Enfin, j'ai changé le '\ 'caractères dans le chemin du fichier vers' /' personnages.

Je veux dire que mon nouveau chemin de fichier est devenu C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/World_cup_dataset.csv et mon problème a été corrigé. Si vous regardez le fichier my.ini situé dans le dossier MySQL Server, le chemin de secure-file-priv est "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads ". Cette solution est donc logique.

1
Mehmet
SHOW VARIABLES LIKE "secure_file_priv";

secure_file_priv    C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\

SELECT  *  INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/algo.csv'  
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'   LINES TERMINATED BY '\n'   FROM sams.trafico;
0
user150497

J'ai également eu ces problèmes et j'ai fait des expériences en utilisant les différentes réponses que j'ai trouvées sur Internet. J'ai obtenu que cela fonctionne sur mon serveur WAMP (3.1.7) local sur un PC Windows 10 63 bits. Je l'ai fait dans PHP, connecté en tant qu'administrateur root.

J'ai d'abord simplement annulé le --secure-file-priv problème en entrant secure-file-priv = "" sous le [mysqld] rubrique my.ini.

Deuxièmement, j'ai créé une requête SQL et l'ai exécutée:

$sql = "SELECT * FROM inloggning INTO OUTFILE 'C:/Temp/sample.csv' CHARACTER SET 'Latin1' FIELDS ENCLOSED BY '\"' TERMINATED BY '\;' ESCAPED BY '\"' LINES TERMINATED BY '\r\n'";

$result =   mysqli_query($databas_link, $sql) 
            or die('File output failed!(sql) - MySQL error: ('.mysqli_errno($databas_link).') '.mysqli_error($databas_link).' ');

Cela fonctionne parfaitement pour moi. Maintenant, je travaille sur la façon d'enregistrer le fichier sur le serveur de l'hôtel Web, en utilisant les mêmes changements et la même syntaxe.

0
Errol Jacoby