我正在尝试使用
将数据加载到mysql数据库中LOAD DATA LOCAL
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';
这个问题的主题是我得到的回应。我理解默认情况下本地数据卸载是关闭的,我必须使用命令local-infile=1
启用它,但我不知道在哪里放置此命令。
答案 0 :(得分:76)
您可以在设置客户端连接时将其指定为附加选项:
mysql -u myuser -p --local-infile somedatabase
这是因为该功能打开了一个安全漏洞。因此,您必须以明确的方式启用它,以防您真正想要使用它。
客户端和服务器都应启用local-file选项。否则它不起作用。要为服务器端服务器上的文件启用它,请在my.cnf
配置文件中添加以下内容:
loose-local-infile = 1
答案 1 :(得分:23)
我找到了答案here。
这是因为服务器变量local_infile
设置为 FALSE | 0 。从document进行引用。
您可以通过执行以下操作进行验证:
SHOW VARIABLES LIKE 'local_infile';
如果您具有SUPER特权,则可以通过执行以下命令来启用它(无需使用新配置重新启动服务器):
SET GLOBAL local_infile = 1;
答案 2 :(得分:12)
http://dev.mysql.com/doc/refman/5.6/en/load-data-local.html
将它放在my.cnf中 - [client]
部分应该已存在
(如果你不太担心安全问题)。
[client]
loose-local-infile=1
答案 3 :(得分:6)
所有这些并没有在我全新的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)
这导致我this answer from Nelson to another question on stackoverflow为我解决了这个问题!
答案 4 :(得分:5)
还为此问题苦苦挣扎,尝试使用Windows上的 MySQL Workbench 从我的本地计算机上将.csv数据上传到AWS RDS实例中。
我需要添加的内容是在“连接”>“高级”>“其他”中添加OPT_LOCAL_INFILE=1
。请注意,CAPS是必需的。
我在PeterMag in AWS Developer Forums处找到了这个答案。
有关更多信息:
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中的错误。除了 该线程前面显示的配置,您还需要更改 工作台中的MYSQL连接如下:
- 转到MYSQL的“欢迎”页面,其中显示了您的所有连接
- 选择“管理服务器连接”(小扳手图标)
- 选择您的连接
- 选择“高级”标签
- 在“其他”框中,添加OPT_LOCAL_INFILE = 1
现在,我可以在MYSQL RDS上使用LOAD DATA LOCAL INFILE查询。它似乎 不需要File_priv权限。*
答案 5 :(得分:1)
在AWS MySQL 8.0 RDS中导入CSV文件时遇到相同的问题。
mysql>将数据本地文件'/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
答案 6 :(得分:1)
在使用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));
为了完整起见,我要补充一点,我正在通过docker exec -it testdb sh
在容器内运行mysql版本。 mysql版本是用于x86_64上的Linux的 mysql Ver 8.0.17(MySQL Community Server-GPL)。 这也已通过 mysql.exe版本14.14 Distrib 5.7.14 for Win64(x86_64)进行了测试,这是WAMP64的另一个mysql版本。 [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 < / strong>版本。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;
后检查。答案 7 :(得分:0)
带有默认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
答案 8 :(得分:0)
请参阅《 MySQL 8.0参考手册》-6.1.6 Security Issues with LOAD DATA LOCAL
在服务器端,运行
*************************************************************
1. Determining whether pyenv is already installed and in PATH
*************************************************************
- pyenv was not found in PATH.
*********************************************************
2. Determining whether pyenv should be cloned from GitHub
*********************************************************
- pyenv git repository already cloned to /Users/cispl-reserve/.pyenv-repository. Won't attempt to clone again.
*******************************************
3. Temporarily export necessary pyenv paths
*******************************************
****************************************************************************
4. Checking whether Python can be downloaded (through curl, wget, or aria2c)
****************************************************************************
************************************************************
5. Installing Python 3.7.2. This step may take a few minutes
************************************************************
Downloading openssl-1.0.2k.tar.gz...
-> https://pyenv.github.io/pythons/6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0
Installing openssl-1.0.2k...
Installed openssl-1.0.2k to /Users/cispl-reserve/.pyenv/versions/3.7.2
Downloading readline-6.3.tar.gz...
-> https://pyenv.github.io/pythons/56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43
Installing readline-6.3...
Installed readline-6.3 to /Users/cispl-reserve/.pyenv/versions/3.7.2
Downloading Python-3.7.2.tar.xz...
-> https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
Installing Python-3.7.2...
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
Please consult to the Wiki page to fix the problem.
https://github.com/pyenv/pyenv/wiki/Common-build-problems
BUILD FAILED (OS X 10.12.1 using python-build 20180424)
Inspect or clean up the working tree at /var/folders/hq/znb1htl568j9rxcgqpgtkg5w0000gp/T/python-build.20190705142457.64163
Results logged to /var/folders/hq/znb1htl568j9rxcgqpgtkg5w0000gp/T/python-build.20190705142457.64163.log
Last 10 log lines:
install|*) ensurepip="" ;; \
esac; \
./python.exe -E -m ensurepip \
$ensurepip --root=/ ; \
fi
Looking in links: /var/folders/hq/znb1htl568j9rxcgqpgtkg5w0000gp/T/tmpobl4rhc0
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-18.1 setuptools-40.6.2
Exiting due to failure
==============================================
II. Creating self-contained EBCLI installation
==============================================
./aws-elastic-beanstalk-cli-setup/scripts/bundled_installer: line 51: /Users/cispl-reserve/.pyenv/versions/3.7.2/bin/python: No such file or directory
./aws-elastic-beanstalk-cli-setup/scripts/bundled_installer: line 28: echo_with_indentation: command not found
在客户端,运行
mysql.server start --local-infile
答案 9 :(得分:0)
最正确的答案是正确的。请首先直接在MySQL CLI中检查它们。如果此方法解决了该问题,则可能需要使其在Python3中运行,只需将其作为参数传递给MySQLdb.connect
self.connection = MySQLdb.connect(
host=host, user=settings_DB.db_config['USER'],
port=port, passwd=settings_DB.db_config['PASSWORD'],
db=settings_DB.db_config['NAME'],
local_infile=True)
答案 10 :(得分:0)
只需一点补充。
在mysql.connector版本8.0.16中找到了另一个轮回 现在,它需要 allow_local_infile = True ,否则您将看到上述错误。 在以前的版本中工作。
conn = mysql.connector.connect(host=host, user=user, passwd=passwd, database=database, allow_local_infile=True)
答案 11 :(得分:0)
如果您正在使用Java8或+版本,JDBC和MySql8并遇到此问题,请尝试以下操作:
将参数添加到连接字符串:
jdbc:mysql://localhost:3306/tempDB?allowLoadLocalInfile=true
还要设置
local_infile = 1
在my.cnf文件中。
最新版本的mysql-java-connector可能不允许直接连接到本地文件。因此,使用此参数,您可以启用它。这对我有用。