我正在尝试使用以下方式将数据加载到mysql数据库中
LOAD DATA LOCAL
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';
这个问题的主题是我得到的答复。我了解默认情况下将关闭本地数据卸载,因此我必须使用命令启用它,local-infile=1
但是我不知道在何处放置此命令。
Answers:
您可以在设置客户端连接时将其指定为附加选项:
mysql -u myuser -p --local-infile somedatabase
这是因为该功能打开了一个安全漏洞。因此,如果您确实要使用它,则必须以显式方式启用它。
客户端和服务器都应启用本地文件选项。否则它将不起作用。要为服务器端服务器上的文件启用它,请在my.cnf
配置文件中添加以下内容:
loose-local-infile = 1
local_infile=1
,然后重新启动了服务器服务。我也用--local-infile dbname
选项运行客户端,例如mysql -u root -p --local-infile mydatabase
。
http://dev.mysql.com/doc/refman/5.6/en/load-data-local.html
将其放在my.cnf中-该[client]
部分应该已经存在(如果您不太担心安全性的话)。
[client]
loose-local-infile=1
所有这些并没有在我全新的Ubuntu 15.04上为我解决。
我删除了LOCAL
并得到了以下命令:
LOAD DATA
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';
但是我得到了:
MySQL said: File 'A.txt' not found (Errcode: 13 - Permission denied)
这使我得到了尼尔森的答案,这是关于stackoverflow的另一个问题,该问题为我解决了!
带有默认MySQL连接器的SpringBoot 2.1
要解决此问题,请按照说明进行操作
要设置此全局变量,请按照MySQL文档https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html中提供的说明进行操作
allowLoadLocalInfile = true示例:jdbc:mysql:// localhost:3306 / xxxx?useSSL = false&useUnicode = yes&characterEncoding = UTF-8&allowLoadLocalInfile = true
在AWS MySQL 8.0 RDS中导入CSV文件时遇到了相同的问题。
mysql> LOAD DATA LOCAL INFILE'/tmp/your.csv'到表test.demo2字段以','封闭'''以'\ n'结尾的行忽略1行;
错误1148(42000):此MySQL版本不允许使用的命令
1)检查local_infile
参数
mysql> SHOW VARIABLES LIKE 'local_infile';
2)从客户端注销,然后使用以下参数重新登录。
mysql -u root -p -h rdsendpoint --local-infile=1
3)运行相同的命令
mysql> LOAD DATA LOCAL INFILE '/tmp/your.csv' INTO TABLE test.demo2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;
Query OK, 300 rows affected (0.01 sec)
Records: 300 Deleted: 0 Skipped: 0 Warnings: 0
还遇到了这个问题,尝试使用Windows上的MySQL Workbench从本地计算机将.csv数据上传到AWS RDS实例。
我需要添加的内容OPT_LOCAL_INFILE=1
是:连接>高级>其他。注意CAPS是必需的。
我在AWS Developer Forums中找到了PeterMag的答案。
有关更多信息:
SHOW VARIABLES LIKE 'local_infile';
已经返回ON
,查询为:
LOAD DATA LOCAL INFILE 'filepath/file.csv'
INTO TABLE `table_name`
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
从上面引用的答案源进行复制:
显然,这是MYSQL Workbench V8.X中的错误。除了此线程前面显示的配置之外,您还需要按如下所示更改Workbench中的MYSQL连接:
- 转到MYSQL的“欢迎”页面,其中显示了所有连接
- 选择“管理服务器连接”(小扳手图标)
- 选择你的连接
- 选择高级选项卡
- 在“其他”框中,添加OPT_LOCAL_INFILE = 1
现在,我可以在MYSQL RDS上使用LOAD DATA LOCAL INFILE查询。似乎不需要File_priv权限。*
使用docker [1]加载数据时出现此错误。在执行以下后续步骤后,该解决方案开始工作。最初,我创建了数据库,表datavault
和fdata
。当我尝试导入数据[2]时,出现了错误[3]。然后我做了:
SET GLOBAL local_infile = 1;
SHOW VARIABLES LIKE 'local_infile';
mysql -P 3306 -u required --local-infile=1 -p
,有关创建用户的信息,请参见[4]。use datavault;
drop table fdata;
CREATE TABLE fdata (fID INT, NAME VARCHAR(64), LASTNAME VARCHAR(64), EMAIL VARCHAR(128), GENDER VARCHAR(12), IPADDRESS VARCHAR(40));
为了完整起见,我会添加我正在通过容器内部运行mysql版本docker exec -it testdb sh
。mysql版本是x86_64上用于Linux的mysql Ver 8.0.17(MySQL Community Server-GPL)。对于Win64(x86_64),这是WAMP64的另一种mysql版本,还使用mysql.exe版本14.14 Distrib 5.7.14进行了测试。在[5]中列出了使用的相关命令。
[1] docker run --name testdb -v //c/Users/C/Downloads/data/csv-data/:/var/data -p 3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:latest
[2] load data local infile '/var/data/mockdata.csv' into table fdata fields terminated by ',' enclosed by '' lines terminated by '\n' IGNORE 1 ROWS;
[3]错误1148(42000):此MySQL版本不允许使用的命令
[4]使用以下方法创建了所需的客户端:
CREATE USER 'required'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'required'@'%';
FLUSH PRIVILEGES;
ALTER USER 'required'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
如果遇到此错误,则可能需要此行:Authentication plugin ‘caching_sha2_password’ cannot be loaded
[5]从WAMP64使用mysql的命令:
mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile=1
其中端口是您所描述的映射到主机的端口,docker ps -a
并且使用来获得主机ip docker-machine ip
(这取决于操作系统以及Docker版本)。load data local infile 'c:/Users/C/Downloads/data/csv-data/mockdata.csv' into table fdata fields terminated by ',' enclosed by '' lines terminated by '\n';
mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile datavault3 -e "LOAD DATA LOCAL INFILE 'c:/Users/C/Downloads/data/csv-data/mockdata.csv' REPLACE INTO TABLE fdata FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS"
它成功加载了运行后易于检查的数据select * from fdata limit 10;
。请参阅《 MySQL 8.0参考手册》-6.1.6 LOAD DATA LOCAL的安全性问题
在服务器端,运行
mysql.server start --local-infile
在客户端,运行
mysql --local-infile database_name -u username -p