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

sof*_*ted 47 mysql client local

我不明白其他人对类似问题的回答,除了最明显的问题,例如下面的问题:

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)
Run Code Online (Sandbox Code Playgroud)

我的意思是提供了确切的代码。如果有人能一步一步地引导我了解在“客户端”端和“服务器”端启用本地数据需要做什么,我将不胜感激。好像我在客户端启用了本地数据,但我不知道我需要给我的电脑什么指令才能启用“服务器端”。我根本不精通技术,我只是希望能够将数据上传到 MySQL 工作台。

ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
Run Code Online (Sandbox Code Playgroud)
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)
;
Run Code Online (Sandbox Code Playgroud)

我只是希望能够使用命令行 shell 将 .csv 文件导入 MySQL。

小智 69

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

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

当我想按照 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)
Run Code Online (Sandbox Code Playgroud)
  1. 退出当前服务器:
mysql> quit
Bye
Run Code Online (Sandbox Code Playgroud)
  1. 使用 local-infile 系统变量连接到服务器:
mysql --local-infile=1 -u root -p1
Run Code Online (Sandbox Code Playgroud)

此变量控制 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)
Run Code Online (Sandbox Code Playgroud)

它有效吗?

参考:

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


小智 26

您可以检查local_infile是禁用还是启用。所以,你试试这个——

mysql> show global variables like 'local_infile';
Run Code Online (Sandbox Code Playgroud)

如果它显示——

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  |  OFF  |
+---------------+-------+
(this means local_infile is disable)
Run Code Online (Sandbox Code Playgroud)

然后用这个启用 -

mysql> set global local_infile=true;
Run Code Online (Sandbox Code Playgroud)

然后再次检查并使用此退出mysql服务器-

mysql> exit
Run Code Online (Sandbox Code Playgroud)

现在您必须使用local_infile连接/登录服务器。为此,从终端命令行运行此代码-

mysql --local_infile=1 -u root -ppassword DB_name
Run Code Online (Sandbox Code Playgroud)

现在从本地文件加载数据-

mysql> load data local infile 'path/file_name.extention' into table table_name;
Run Code Online (Sandbox Code Playgroud)

它在我的电脑上工作。你可以试试这个。谢谢。


Won*_*ane 18

这是我必须在 Ubuntu 20.04 / MySQL 8 上解决此问题的方法:

  1. nano /etc/mysql/mysql.conf.d/mysqld.cnf
  2. 在该[mysqld]部分中添加以下行:
local_infile    = 1
Run Code Online (Sandbox Code Playgroud)
  1. 将这两行添加到文件底部:
[client]

local_infile    = 1
Run Code Online (Sandbox Code Playgroud)
  1. 从我的客户端运行此命令:SET GLOBAL local_infile=1;

注意:修改了上述内容以包含额外的步骤以确保local_infile=1添加到该[mysqld]部分。这使我不必在每次重新启动后运行SET GLOBAL local_infile=1;


小智 10

在终端上输入以下命令 -

SHOW GLOBAL VARIABLES LIKE 'local_infile';
Run Code Online (Sandbox Code Playgroud)

如果是0oe false,则输入以下命令 -

SET GLOBAL local_infile = TRUE;
Run Code Online (Sandbox Code Playgroud)


小智 6

对于MySQL 8.0.20的默认安装:

i) 查找位于 C:\ProgramData\MySQL\MySQL Server 8.0\my.ini 的初始化文件。

ii) 使用记事本打开 my.ini 文件。

iii) 在 CLIENT 部分下查找标头 [client]、[mysql],在 SERVER 部分下查找标头 [mysqld]。

iv) 在每个标题下添加以下语句:

local_infile=开

v) 保存文件并重新启动 Windows 本地服务下的 MySQL80 服务。

它应该有效。


小智 5

my.cnf 文件:

[client]  
local_infile=1
Run Code Online (Sandbox Code Playgroud)

来自官方MySQL 8.0 文档

  • @AdamFriedman 谢谢你的观点!我的服务器配置文件位于`/etc/mysql/mysql.conf.d/mysqld.cnf`中,我在[mysqld]下添加了local_infile=1,现在它可以工作了!我当前无法编辑此答案,因为编辑队列已满,但如果没有 mysqld 对,它是不完整的。 (2认同)