错误:加载本地数据已禁用-必须在客户端和服务器端都启用


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

Answers:


7

如果在服务器或客户端上禁用了本地功能,则尝试发出LOAD DATA LOCAL语句的客户端将收到以下错误消息:

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

我想按照Mysql教程将文本文件pet.txt加载到pet表中时遇到相同的问题: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. 使用local-infile系统变量连接到服务器:
mysql --local-infile=1 -u root -p1

此变量控制LOAD DATA语句的服务器端LOCAL功能。根据local_infile设置,服务器将拒绝或允许在客户端启用LOCAL的客户端加载本地数据。要显式地使服务器拒绝或允许LOAD DATA LOCAL语句(无论在构建时或运行时如何配置客户端程序和库),请分别在禁用或启用local_infile的情况下启动mysqld。也可以在运行时设置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/zh-CN/server-system-variables.html#sysvar_local_infile


这对我
有用

2

my.cnf 文件:

[client]  
local_infile=1

摘自MySQL 8.0官方文档


MySql文件不是很清楚。您设置了[client],如何使服务器端和客户端都正确显示?在具有MySql 8的Ubuntu上,my.cnf文件只是引用/etc/mysql/mysql.conf.d和/etc/mysql/conf.d的一对目录。我正在尝试mysql.conf.d / mysql.cnf文件中的设置。但是,老实说,在顶层和每个子目录中只有一个包含相同名称的“ mysql.cnf”文件的文件夹怎么办?服务器没有变化吗?
pauljohn32

1
查找具有标签[mysqld]且正在使用的配置文件。在该标签下以及[client]标签下添加相同的全局配置。
亚当弗里德曼

@AdamFriedman谢谢你的意思!我的服务器配置文件已/etc/mysql/mysql.conf.d/mysqld.cnf插入,我在[mysqld]下添加了local_infile = 1,它现在可以正常工作!我目前无法编辑此答案,因为编辑队列已满,但是如果没有mysqld对,它是不完整的。
aderchox
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.