HATA: Yerel verilerin yüklenmesi devre dışı - bu hem istemci hem de sunucu tarafında etkinleştirilmelidir


11

Aşağıdaki gibi, en belirgin olanlar dışında başkalarının benzer sorulara verdiği yanıtları anlamıyorum:

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)

Bununla tam kod verildiğini kastediyorum. Birisi bana adım adım, "istemci" tarafında ve "sunucu" tarafında yerel verileri etkinleştirmek için ne yapmam gerekiyorsa, ben çok takdir ediyorum. İstemci tarafında yerel verileri etkinleştirdim gibi görünüyor, ancak "sunucu tarafı" nı etkinleştirmek için bilgisayarıma hangi talimatları vermem gerektiğini bilmiyorum. Hiç teknoloji meraklısı değilim ve sadece verilerin MySQL çalışma tezgahına yüklendiği noktaya gelmek istiyorum.

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

Sadece komut satırı kabuğunu kullanarak bir .csv dosyasını MySQL'e aktarabilmek istiyorum.


Yanıtlar:


8

LOCAL özelliği devre dışı bırakılırsa, sunucu veya istemci tarafında, LOAD DATA LOCAL deyimi vermeye çalışan bir istemci aşağıdaki hata iletisini alır:

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

Mysql'in bir öğreticisini izleyerek pet.txt metin dosyasını pet tablosuna yüklemek istediğimde de aynı sorunla karşılaştım: https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html

Çevrimiçi arama yaptıktan sonra, aşağıdaki adımlarla düzelttim:

  1. Bu komutu kullanarak genel değişkenleri ayarlayın:
mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)
  1. geçerli sunucudan çık:
mysql> quit
Bye
  1. local-infile sistem değişkeni ile sunucuya bağlanın:
mysql --local-infile=1 -u root -p1

Bu değişken, LOAD DATA deyimleri için sunucu tarafı LOCAL özelliğini denetler. Local_infile ayarına bağlı olarak, sunucu, istemci tarafında LOCAL etkin olan istemciler tarafından yerel veri yüklemesini reddeder veya buna izin verir. Sunucunun LOAD DATA LOCAL deyimlerini reddetmesine veya izin vermesine neden olmak için (istemci programlarının ve kitaplıklarının derleme zamanında veya çalışma zamanında nasıl yapılandırıldığına bakılmaksızın), mysqld öğesini sırasıyla local_infile devre dışı veya etkin olarak başlatın. local_infile çalışma zamanında da ayarlanabilir.

  1. Veritabanınızı kullanın ve dosyayı tabloya yükleyin:
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)

Çalışıyor mu?

Referanslar:

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


Bu benim için çalışıyor :-)
Bryon Nicoson

2

my.cnf dosya:

[client]  
local_infile=1

Resmi MySQL 8.0 belgelerinden .


MySql belgeleri çok açık değil. [İstemci] ayarladınız, sunucu tarafını ve istemci taraflarını nasıl doğru bir şekilde ortaya çıkarabilirsiniz? MySql 8 ile Ubuntu'da, my.cnf dosyası /etc/mysql/mysql.conf.d ve /etc/mysql/conf.d 'e atıfta bulunan sadece bir çift klasördür. Mysql.conf.d / mysql.cnf dosyasındaki ayarı deniyorum. Ancak, dürüst olmak gerekirse, en üst düzeyde ve her alt dizinde aynı adlı "mysql.cnf" dosyaları olan tek bir klasöre sahip olmak nasıl mantıklı olabilir. Ve sunucuda değişiklik yok mu?
pauljohn32

1
Hangi yapılandırma dosyasının [mysqld] etiketine sahip olduğunu ve kullanılmakta olduğunu bulun. Aynı global yapılandırmayı bu etiketin altına ve [istemci] etiketinin altına ekleyin.
Adam Friedman

@AdamFriedman Puanınız için teşekkürler! Benim için sunucu yapılandırma dosyası vardı /etc/mysql/mysql.conf.d/mysqld.cnfve [mysqld] altına local_infile = 1 ekledim ve şimdi çalışıyor! Düzenleme kuyruğu dolu olduğu için şu anda bu yanıtı düzenleyemiyorum, ancak mysqld çifti olmadan eksik.
aderchox
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.