ERRORE: il caricamento dei dati locali è disabilitato: deve essere abilitato sia sul lato client che sul lato server


11

Non capisco le risposte che altri hanno fornito a domande simili ad eccezione di quelle più ovvie, come quella qui sotto:

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)

Con questo intendo il codice esatto è stato fornito. Gradirei molto se qualcuno potesse guidarmi, passo dopo passo, cosa devo fare per abilitare i dati locali sul lato "client" e "server". Sembra che io abbia abilitato i dati locali sul lato client, ma non so quali istruzioni devo dare al mio computer per abilitare il "lato server". Non sono affatto esperto di tecnologia e voglio solo essere in grado di arrivare al punto in cui i dati sono stati caricati nel workbench di MySQL.

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)
;

Voglio solo essere in grado di importare un file .csv in MySQL usando la shell della riga di comando.


Risposte:


8

Se la funzionalità LOCAL è disabilitata, sul lato server o lato client, un client che tenta di emettere un'istruzione LOAD DATA LOCAL riceve il seguente messaggio di errore:

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

Ho riscontrato lo stesso problema quando volevo caricare il file di testo pet.txt nella tabella degli animali domestici seguendo un tutorial di Mysql: https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html

Dopo aver cercato online, l'ho risolto con questi passaggi:

  1. imposta le variabili globali usando questo comando:
mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)
  1. chiudere il server corrente:
mysql> quit
Bye
  1. connettersi al server con la variabile di sistema local-infile:
mysql --local-infile=1 -u root -p1

Questa variabile controlla la funzionalità LOCAL sul lato server per le istruzioni LOAD DATA. A seconda dell'impostazione local_infile, il server rifiuta o consente il caricamento dei dati locali da parte dei client con LOCAL abilitato sul lato client. Per far sì che il server rifiuti esplicitamente o consenta le istruzioni LOAD DATA LOCAL (indipendentemente dal modo in cui i programmi client e le librerie sono configurati in fase di compilazione o runtime), avviare mysqld con local_infile disabilitato o abilitato, rispettivamente. local_infile può anche essere impostato in fase di esecuzione.

  1. usa il tuo database e carica il file nella tabella:
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)

Funziona?

Riferimenti:

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


Questo funziona per me :-)
Bryon Nicoson il

2

my.cnf file:

[client]  
local_infile=1

Dalla documentazione ufficiale di MySQL 8.0 .


I documenti MySql non sono molto chiari. Impostate [client], come far emergere entrambi lato server e lato client giusto? Su Ubuntu con MySql 8, il file my.cnf è solo una coppia di directory che fanno riferimento a /etc/mysql/mysql.conf.d e /etc/mysql/conf.d. Sto provando l'impostazione nel file mysql.conf.d / mysql.cnf. Ma, onestamente, come può avere senso avere una singola cartella con i file "mysql.cnf" nello stesso livello e in ogni sottodirectory. E nessuna modifica per il server?
pauljohn32,

1
Trova il file di configurazione che ha il tag [mysqld] e viene utilizzato. Aggiungi la stessa configurazione globale sotto quel tag e sotto il tag [client].
Adam Friedman,

@AdamFriedman Grazie per il punto! Il file di configurazione del server per me era in /etc/mysql/mysql.conf.d/mysqld.cnfe ho aggiunto local_infile = 1 in [mysqld] e ora funziona! Al momento non posso modificare questa risposta perché la coda di modifica è piena, ma è incompleta senza la coppia mysqld.
aderchox,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.