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.
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
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;
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
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!
SpringBoot 2.1 avec connecteur MySQL par défaut
Pour résoudre cela, veuillez suivre les instructions
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
allowLoadLocalInfile = true Exemple: jdbc: mysql: // localhost: 3306/xxxx? useSSL = false & useUnicode = yes & characterEncoding = UTF-8 & allowLoadLocalInfile = true
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
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)
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
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.connect
as 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)