web-dev-qa-db-fra.com

Désactiver le protocole sécurisé pour le chargement de données sur MySQL

J'exécute MySQL 5.7 sur une machine Windows 10. J'ai lu tous les sujets SO sur ce sujet et je n'ai toujours pas compris comment charger mes données et surmonter cette erreur:

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

J'ai 1) vérifié les paramètres pour les modifier afin de pouvoir les charger à partir du répertoire dans lequel j'ai sauvegardé mon jeu de données, 2) ouvert MySQL en tant qu'administrateur, vérifié la ligne de commande et confirmé que le fichier sécurisé pointe bien sur mon répertoire, 3) et confirmé dans le fichier init qu'il pointe vers le bon répertoire contenant mon fichier. J'ai essayé de changer l'emplacement de l'ensemble de données afin qu'il soit dans un nouveau dossier et de confirmer qu'il y avait été déplacé avec les méthodes ci-dessus et que cela ne fonctionnait toujours pas.

Toute aide serait la bienvenue, merci.

13
dataelephant

Je ne peux pas reproduire le problème.

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.13    |
+-----------+
1 row in set (0,00 sec)

mysql> SELECT @@GLOBAL.secure_file_priv;
+---------------------------+
| @@GLOBAL.secure_file_priv |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0,00 sec)

-- USE ...

mysql> LOAD DATA INFILE '/var/lib/mysql-files/myfile.csv'
    -> INTO TABLE `test_files`
    -> COLUMNS TERMINATED BY ',' ENCLOSED BY '\"'
    -> LINES TERMINATED BY '\n';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv
option so it cannot execute this statement

Changer de fichier: /etc/mysql/my.cnf

[mysqld]
.
.
.
secure_file_priv=/var/lib/mysql-files/
.
.
.

Redémarrez MySQL. 

mysql> SELECT @@GLOBAL.secure_file_priv;
+---------------------------+
| @@GLOBAL.secure_file_priv |
+---------------------------+
| /var/lib/mysql-files/     |
+---------------------------+
1 row in set (0,00 sec)

mysql> LOAD DATA INFILE '/var/lib/mysql-files/myfile.csv'
    -> INTO TABLE `test_files`
    -> COLUMNS TERMINATED BY ',' ENCLOSED BY '\"'
    -> LINES TERMINATED BY '\n';
Query OK, 3 rows affected (0,00 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

Voir 6.1.4 Variables système serveur :: secure_file_priv

11
wchiquito

Sur MACOSX, ajoutez .my.cnf à votre répertoire personnel avec le contenu suivant: 

[mysqld_safe]
[mysqld]
secure_file_priv=""

https://github.com/Homebrew/homebrew-versions/issues/1552

4
ShQ

Cela fonctionne dans MacOs Sierra 10.12.6:

utiliser la commande 

mysql --help | more

et cherchez une ligne où il est écrit: 

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf 
~/.my.cnf

Dans mon cas, j'ai essayé de créer un fichier my.cnf dans le répertoire personnel, mais cela n'a pas fonctionné. La seule solution que j'ai trouvée est de créer le fichier dans le dossier, etc. avec 

Sudo vim /etc/my.cnf

et mis dedans 

[mysqld_safe]
[mysqld]
secure-file-priv = ""

Ensuite, vous pouvez vérifier que tout fonctionne avec 

select @@GLOBAL.secure_file_priv;

dans mysql et vérifiez que la valeur est vide et différente de NULL. 

Enfin, enregistrez les fichiers dans le répertoire/tmp, puis déplacez-les dans le répertoire souhaité. Alternativement (mais éventuellement dangereux) utiliser 

chmod 1777 dir

où dir est le nom du répertoire dans lequel vous écrivez les fichiers. 

3
Galuoises

Notez que sous Windows, définissez 'secure_file_priv' sur un chemin différent ou désactivez-le complètement en le définissant sur:

secure_file_priv=""

peut ne pas fonctionner si le service MySQL s'exécute sur un compte disposant de peu de privilèges (installation 5.7 par défaut). Vous pouvez changer cela en sélectionnant le "compte système local" dans les services sous Propriétés -> Ouvrir une session.

0
Morey
  1. Vérifiez les privilèges du système d'exploitation sur le répertoire à partir duquel vous importez.
  2. Lorsque vous essayez d'importer vos données via "CVS en utilisant LOAD DATA", sélectionnez l'option Utiliser local. 
0
MAS9000