ERREUR: le chargement des données locales est désactivé - cela doit être activé à la fois côté client et côté serveur

11

Je ne comprends pas les réponses que d'autres ont fournies à des questions similaires, à l'exception des plus évidentes, comme celle ci-dessous:

mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+
1 row in set (0.01 sec)

Je veux dire par là que le code exact a été fourni. J'apprécierais grandement si quelqu'un pouvait me guider, étape par étape, ce que je dois faire pour activer les données locales du côté "client" et du côté "serveur". Il semble que j'aie activé les données locales côté client, mais je ne sais pas quelles instructions je dois donner à mon ordinateur pour activer le "côté serveur". Je ne suis pas du tout technophile, et je veux juste pouvoir arriver au point où les données ont été téléchargées dans MySQL Workbench.

ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
CREATE TABLE toys (
uniq_id VARCHAR(1000),
product_name VARCHAR(1000),
manufacturer VARCHAR(1000),
price VARCHAR(1000),
number_available_in_stock VARCHAR (1000),
number_of_reviews INT,
number_of_answered_questions INT,
average_review_rating VARCHAR(1000),
amazon_category_and_sub_category VARCHAR(1000),
customers_who_bought_this_item_also_bought VARCHAR(1000),
description VARCHAR(1000),
product_information VARCHAR(1000),
product_description VARCHAR(1000),
items_customers_buy_after_viewing_this_item VARCHAR(1000),
customer_questions_and_answers VARCHAR(1000),
customer_reviews VARCHAR(1000),
sellers VARCHAR(1000)
);

LOAD DATA LOCAL INFILE ‘/Users/BruddaDave/Desktop/amazonsample.csv INTO TABLE toys
FIELDS TERMINATED BY ‘,’
LINES TERMINATED BY ‘\n
IGNORE 1 LINES
(uniq_id, product_name, manufacturer, price, number_available_in_stock, number_of_reviews, number_of_answered_questions, average_review_rating, amazon_category_and_sub_category, customers_who_bought_this_item_also_bought, description, product_information, product_description, items_customers_buy_after_viewing_this_item, customer_questions_and_answers, customer_reviews, sellers)
;

Je veux juste pouvoir importer un fichier .csv dans MySQL en utilisant le shell de ligne de commande.

tellement frustré
la source
Est-ce que cela répond à votre question? MySQL: Activer la réinitialisation de LOAD DATA LOCAL INFILE
danblack

Réponses:

8

Si la capacité LOCAL est désactivée, côté serveur ou côté client, un client qui tente d'émettre une instruction LOAD DATA LOCAL reçoit le message d'erreur suivant:

ERROR 3950 (42000): Loading local data is disabled; this must be
enabled on both the client and server side

J'ai rencontré le même problème lorsque je veux charger le fichier texte pet.txt dans la table pet suite à un tutoriel de Mysql: https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html

Après avoir recherché en ligne, je l'ai corrigé par ces étapes:

  1. définissez les variables globales à l'aide de cette commande:
mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)
  1. quitter le serveur actuel:
mysql> quit
Bye
  1. se connecter au serveur avec la variable système local-infile:
mysql --local-infile=1 -u root -p1

Cette variable contrôle la capacité LOCAL côté serveur pour les instructions LOAD DATA. En fonction du paramètre local_infile, le serveur refuse ou autorise le chargement de données locales par les clients dont LOCAL est activé côté client. Pour obliger explicitement le serveur à refuser ou à autoriser les instructions LOAD DATA LOCAL (quelle que soit la configuration des programmes clients et des bibliothèques au moment de la construction ou de l'exécution), démarrez mysqld avec local_infile désactivé ou activé, respectivement. local_infile peut également être défini lors de l'exécution.

  1. utilisez votre base de données et chargez le fichier dans le tableau:
mysql> use menagerie
Database changed
mysql> load data local infile '/path/pet.txt' into table pet;
Query OK, 8 rows affected, 7 warnings (0.00 sec)

Est-ce que ça marche?

Références:

https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options .html # option_cmake_enabled_local_infile https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_local_infile

Zhi-Qiang Ni
la source
Cela fonctionne pour moi :-)
Bryon Nicoson
2

my.cnf fichier:

[client]  
local_infile=1

De la documentation officielle MySQL 8.0 .

Breky
la source
Les documents MySql ne sont pas très clairs. Vous définissez [client], comment faire en sorte que le côté serveur et le côté client sortent bien? Sur Ubuntu avec MySql 8, le fichier my.cnf n'est qu'une paire de répertoires faisant référence à /etc/mysql/mysql.conf.d et /etc/mysql/conf.d. J'essaie le réglage dans le fichier mysql.conf.d / mysql.cnf. Mais, honnêtement, comment peut-il avoir un sens d'avoir un seul dossier avec les mêmes fichiers "mysql.cnf" au niveau supérieur et dans chaque sous-répertoire. Et pas de changement pour le serveur?
pauljohn32
1
Recherchez le fichier de configuration contenant la balise [mysqld] et utilisé. Ajoutez la même configuration globale sous cette balise ainsi que sous la balise [client].
Adam Friedman
@AdamFriedman Merci pour le point! Le fichier de configuration du serveur pour moi était dans /etc/mysql/mysql.conf.d/mysqld.cnfet j'ai ajouté le local_infile = 1 sous [mysqld] et ça fonctionne maintenant! Je ne peux pas actuellement modifier cette réponse car la file d'attente d'édition est pleine, mais elle est incomplète sans la paire mysqld.
aderchox