web-dev-qa-db-fra.com

ERREUR 1148: La commande utilisée n'est pas autorisée avec cette version de MySQL

J'essaie de charger des données dans la base de données mysql en utilisant

LOAD DATA LOCAL
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';

le sujet de cette question est la réponse que je reçois. Je comprends que le déchargement des données locales est désactivé par défaut et je dois l'activer à l'aide de la commande local-infile=1 mais je ne sais pas où placer cette commande.

52
sosytee

Vous pouvez spécifier cela comme une option supplémentaire lors de la configuration de votre connexion client:

mysql -u myuser -p --local-infile somedatabase

En effet, cette fonctionnalité ouvre une faille de sécurité. Vous devez donc l'activer de manière explicite au cas où vous voudriez vraiment l'utiliser.

Le client et le serveur doivent activer l'option de fichier local. Sinon, cela ne fonctionne pas.Pour l'activer pour les fichiers sur le serveur côté serveur, ajoutez ce qui suit au my.cnf fichier de configuration:

loose-local-infile = 1
85
arkascha

Je trouve la réponse ici .

C'est parce que la variable serveur local_infile est réglé sur FALSE | 0 . Reportez-vous à partir du document .

Vous pouvez vérifier en exécutant:

SHOW VARIABLES LIKE 'local_infile';

Si vous avez le privilège SUPER, vous pouvez l'activer (sans redémarrer le serveur avec une nouvelle configuration) en exécutant:

SET GLOBAL local_infile = 1;
33
Java Xu

http://dev.mysql.com/doc/refman/5.6/en/load-data-local.html

Mettez ceci dans my.cnf - le [client] section devrait déjà être là (si vous n'êtes pas trop préoccupé par la sécurité).

[client]
loose-local-infile=1
12
Vérace

Tout cela ne m'a pas résolu le problème avec mon tout nouveau Ubuntu 15.04.

J'ai enlevé le LOCAL et obtenu cette commande:

LOAD DATA
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';

mais alors j'ai eu:

MySQL said: File 'A.txt' not found (Errcode: 13 - Permission denied)

Cela m'a conduit à cette réponse de Nelson à une autre question sur stackoverflow qui a résolu le problème pour moi!

7
Dominic

SpringBoot 2.1 avec connecteur MySQL par défaut

Pour résoudre cela, veuillez suivre les instructions

1. SET GLOBAL local_infile = 1;

pour définir cette variable globale, veuillez suivre les instructions fournies dans la documentation MySQL https://dev.mysql.com/doc/refman/8.0/fr/load-data-local.html

2. Changer la chaîne du connecteur MySQL

allowLoadLocalInfile = true Exemple: jdbc: mysql: // localhost: 3306/xxxx? useSSL = false & useUnicode = yes & characterEncoding = UTF-8 & allowLoadLocalInfile = true

3
Vineet Sharma

J'ai eu le même problème lors de l'importation du fichier CSV dans AWS MySQL 8.0 RDS.

mysql> LOAD DATA LOCAL INFILE '/tmp/votre.csv' DANS LA TABLE test.demo2 ZONES TERMINÉES PAR ',' CLÔTURÉES PAR '' '' LIGNES TERMINÉES PAR '\ n' LIGNES IGNORE 1;

ERREUR 1148 (42000): La commande utilisée n'est pas autorisée avec cette version de MySQL

1) Vérifier pour local_infile paramètre

mysql> SHOW VARIABLES LIKE 'local_infile';

2) Déconnectez-vous du client et reconnectez-vous en utilisant le paramètre ci-dessous.

mysql -u root -p -h rdsendpoint --local-infile=1

3) Exécuter la même commande

mysql> LOAD DATA LOCAL INFILE '/tmp/your.csv' INTO TABLE test.demo2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;


Query OK, 300 rows affected (0.01 sec)

Records: 300  Deleted: 0  Skipped: 0  Warnings: 0
1
Nilesh Mishra

Juste un petit ajout.

On a trouvé une autre réincarnation dans mysql.connector ver 8.0.16. Elle nécessite maintenant allow_local_infile = True ou vous verrez l'erreur ci-dessus. A travaillé dans les versions précédentes.

conn = mysql.connector.connect(Host=host, user=user, passwd=passwd, database=database, allow_local_infile=True)
1
VladimirS

Reportez-vous au Manuel de référence de MySQL 8.0 - 6.1.6 Problèmes de sécurité avec LOAD DATA LOCAL

Côté serveur, lancez

mysql.server start --local-infile

Côté client, lancez

mysql --local-infile database_name -u username -p
0
mathsyouth

Les meilleures réponses sont correctes. Veuillez les vérifier directement dans MySQL CLI. Si cela résout le problème, vous voudrez peut-être que cela fonctionne en Python3, il vous suffit de le transmettre à la console MySQLdb.connectas paramètre

self.connection = MySQLdb.connect(
                    Host=host, user=settings_DB.db_config['USER'],
                    port=port, passwd=settings_DB.db_config['PASSWORD'], 
                    db=settings_DB.db_config['NAME'],
                    local_infile=True)
0
gies0r