ข้อผิดพลาด: การโหลดข้อมูลในเครื่องถูกปิดใช้งาน - ต้องเปิดใช้งานทั้งในฝั่งไคลเอ็นต์และเซิร์ฟเวอร์


11

ฉันไม่เข้าใจคำตอบที่คนอื่นให้ไว้สำหรับคำถามที่คล้ายกันยกเว้นคำถามที่ชัดเจนที่สุดเช่นคำถามด้านล่าง:

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)

จากนี้ฉันหมายถึงรหัสที่ถูกต้องให้ ฉันยินดีเป็นอย่างยิ่งถ้ามีคนสามารถแนะนำฉันทีละขั้นตอนสิ่งที่ฉันต้องทำเพื่อเปิดใช้งานข้อมูลในเครื่องที่ด้าน "ไคลเอนต์" และ "เซิร์ฟเวอร์" ดูเหมือนว่าฉันได้เปิดใช้งานข้อมูลในเครื่องที่ฝั่งไคลเอ็นต์ แต่ฉันไม่รู้ว่าต้องใช้คำแนะนำใดเพื่อให้คอมพิวเตอร์ของฉันเปิดใช้งาน "ฝั่งเซิร์ฟเวอร์" ฉันไม่เข้าใจเทคโนโลยีเลยและฉันแค่ต้องการไปยังจุดที่ข้อมูลถูกอัปโหลดไปยังฐานข้อมูล 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)
;

ฉันแค่ต้องการนำเข้าไฟล์. csv ไปยัง MySQL โดยใช้เชลล์บรรทัดคำสั่ง


นี่ตอบคำถามของคุณหรือไม่? MySQL: เปิดใช้งาน LOAD DATA LOCAL INFILE รีเซ็ต
danblack

คำตอบ:


7

หากความสามารถของ LOCAL ถูกปิดใช้งานไม่ว่าจะเป็นเซิร์ฟเวอร์หรือฝั่งไคลเอ็นต์ลูกค้าที่พยายามออกคำสั่ง LOAD DATA LOCAL จะได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

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

ฉันพบปัญหาเดียวกันเมื่อฉันต้องการโหลดไฟล์ข้อความ pet.txt ลงในตารางสัตว์เลี้ยงหลังจากการสอนของ Mysql: https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html

หลังจากค้นหาออนไลน์ฉันแก้ไขตามขั้นตอนเหล่านี้:

  1. ตั้งค่าตัวแปรโกลบอลโดยใช้คำสั่งนี้:
mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)
  1. ออกจากเซิร์ฟเวอร์ปัจจุบัน:
mysql> quit
Bye
  1. เชื่อมต่อกับเซิร์ฟเวอร์ด้วยตัวแปรระบบภายในเครื่อง:
mysql --local-infile=1 -u root -p1

ตัวแปรนี้ควบคุมความสามารถ LOCAL ฝั่งเซิร์ฟเวอร์สำหรับคำสั่งโหลดข้อมูล ทั้งนี้ขึ้นอยู่กับการตั้งค่า local_infile เซิร์ฟเวอร์ปฏิเสธหรืออนุญาตให้โหลดข้อมูลในเครื่องโดยไคลเอนต์ที่เปิดใช้งาน LOCAL ทางฝั่งไคลเอ็นต์ ในการทำให้เซิร์ฟเวอร์ปฏิเสธหรืออนุญาตให้ใช้คำสั่งโหลดข้อมูลภายในอย่างชัดเจน (ไม่ว่าโปรแกรมและไลบรารีของไคลเอ็นต์จะได้รับการกำหนดค่าในเวลาที่สร้างหรือรันไทม์) ให้เริ่ม mysqld โดยปิดใช้งานหรือเปิดใช้งาน local_infile ตามลำดับ local_infile ยังสามารถตั้งค่าที่รันไทม์

  1. ใช้ฐานข้อมูลของคุณและโหลดไฟล์ลงในตาราง:
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)

ใช้งานได้หรือไม่

อ้างอิง:

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


สิ่งนี้ใช้ได้กับฉัน :-)
Bryon Nicoson

2

my.cnf ไฟล์:

[client]  
local_infile=1

จากทางราชการ MySQL 8.0 เอกสาร


เอกสาร MySql ไม่ค่อยชัดเจน คุณตั้งค่า [ไคลเอนต์] วิธีทำให้ฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์ทั้งคู่ออกมาอย่างถูกต้อง? บน Ubuntu ที่มี MySql 8 ไฟล์ my.cnf เป็นเพียงไดเรกทอรีที่อ้างถึง /etc/mysql/mysql.conf.d และ /etc/mysql/conf.d ฉันกำลังลองตั้งค่าในไฟล์ mysql.conf.d / mysql.cnf แต่จริงๆแล้วมันมีเหตุผลที่จะมีโฟลเดอร์เดียวที่มีชื่อไฟล์ "mysql.cnf" ในระดับบนสุดและในแต่ละไดเรกทอรีย่อย และไม่มีการเปลี่ยนแปลงสำหรับเซิร์ฟเวอร์?
pauljohn32

1
ค้นหาไฟล์ปรับแต่งใดก็ได้ที่มีแท็ก [mysqld] และกำลังใช้งานอยู่ เพิ่มการกำหนดค่าส่วนกลางเดียวกันภายใต้แท็กนั้นรวมถึงภายใต้แท็ก [ลูกค้า]
Adam Friedman

@ AdamFriedman ขอบคุณสำหรับจุด! ไฟล์การกำหนดค่าเซิร์ฟเวอร์สำหรับฉันอยู่ใน/etc/mysql/mysql.conf.d/mysqld.cnfและฉันเพิ่ม local_infile = 1 ภายใต้ [mysqld] และมันใช้งานได้ทันที! ฉันไม่สามารถแก้ไขคำตอบนี้ได้ในขณะนี้เนื่องจากคิวการแก้ไขเต็ม แต่ไม่สมบูรณ์หากไม่มีคู่ mysqld
aderchox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.