BŁĄD: Ładowanie danych lokalnych jest wyłączone - musi być włączone zarówno po stronie klienta, jak i serwera

11

Nie rozumiem odpowiedzi udzielonych przez innych na podobne pytania, z wyjątkiem najbardziej oczywistych, takich jak poniższe:

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)

Rozumiem przez to, że podano dokładny kod. Byłbym bardzo wdzięczny, gdyby ktoś krok po kroku przeprowadził mnie przez to, co muszę zrobić, aby włączyć lokalne dane po stronie „klienta” i „serwera”. Wygląda na to, że włączyłem lokalne dane po stronie klienta, ale nie wiem, jakie instrukcje muszę przekazać komputerowi, aby włączyć „po stronie serwera”. Nie jestem wcale obeznany z technologią i chcę po prostu przejść do punktu, w którym dane zostały przesłane do środowiska roboczego 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)
;

Chcę tylko móc zaimportować plik .csv do MySQL przy użyciu powłoki wiersza polecenia.

tak sfrustrowany
źródło
Czy to odpowiada na twoje pytanie? MySQL: Włącz reset LOAD DATA LOCAL
INFILE

Odpowiedzi:

7

Jeśli funkcja LOCAL jest wyłączona, po stronie serwera lub klienta, klient, który próbuje wydać instrukcję LOAD DATA LOCAL, otrzymuje następujący komunikat o błędzie:

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

Ten sam problem napotkałem, gdy chcę załadować plik tekstowy pet.txt do tabeli zwierząt domowych po samouczku Mysql: https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html

Po przeszukaniu online naprawiłem to, wykonując następujące czynności:

  1. ustaw zmienne globalne za pomocą tego polecenia:
mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)
  1. wyjdź z bieżącego serwera:
mysql> quit
Bye
  1. połącz się z serwerem za pomocą zmiennej systemowej typu lokalnego:
mysql --local-infile=1 -u root -p1

Ta zmienna steruje LOKALNĄ stroną serwera dla instrukcji LOAD DATA. W zależności od ustawienia local_infile serwer odrzuca lub zezwala na ładowanie danych lokalnych przez klientów, którzy mają włączoną LOCAL po stronie klienta. Aby jawnie spowodować, że serwer odmówi lub zezwoli na instrukcję LOAD DATA LOCAL (niezależnie od tego, jak programy klienckie i biblioteki są konfigurowane w czasie kompilacji lub w czasie wykonywania), uruchom mysqld z odpowiednio wyłączonym lub włączonym plikiem lokalnym. local_infile można również ustawić w czasie wykonywania.

  1. użyj bazy danych i załaduj plik do tabeli:
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)

Czy to działa?

Bibliografia:

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
źródło
To działa dla mnie :-)
Bryon Nicoson
2

my.cnf plik:

[client]  
local_infile=1

Z oficjalnej dokumentacji MySQL 8.0 .

Breky
źródło
Dokumenty MySql nie są bardzo jasne. Ustawiłeś [klienta], jak sprawić, by po stronie serwera i po stronie klienta wychodziły, prawda? W systemie Ubuntu z MySql 8 plik my.cnf to tylko para katalogów odnoszących się do /etc/mysql/mysql.conf.d i /etc/mysql/conf.d. Próbuję ustawienia w pliku mysql.conf.d / mysql.cnf. Ale, szczerze mówiąc, jak sensowne może być posiadanie jednego folderu z plikami o tej samej nazwie „mysql.cnf” na najwyższym poziomie i w każdym podkatalogu. I bez zmian dla serwera?
pauljohn32
1
Znajdź plik konfiguracyjny, który ma tag [mysqld] i jest używany. Dodaj tę samą konfigurację globalną pod tym tagiem, a także pod tagiem [client].
Adam Friedman
@AdamFriedman Dzięki za punkt! Plik konfiguracyjny serwera był dla mnie /etc/mysql/mysql.conf.d/mysqld.cnfi dodałem local_infile = 1 pod [mysqld] i teraz działa! Nie mogę obecnie edytować tej odpowiedzi, ponieważ kolejka edycji jest pełna, ale jest niekompletna bez pary mysqld.
aderchox