Answers:
在MySQL 5.5手册页中:
仅当服务器和客户端都已配置为允许时,LOCAL才起作用。例如,如果mysqld以--local-infile = 0启动,则LOCAL不起作用。请参见第6.1.6节“ LOAD DATA LOCAL的安全性问题”。
您应该设置以下选项:
local-infile=1
进入my.cnf文件的[mysql]条目,或使用--local-infile选项调用mysql客户端:
mysql --local-infile -uroot -pyourpwd yourdbname
您还必须确保在[mysqld]部分中定义了相同的参数,才能启用“本地infile”功能服务器端。
这是安全限制。
apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/var/www/myfile.csv" pid=19488 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=106 ouid=33
。解决方案非常简单。只需更新您的内容/etc/apparmor.d/local/usr.sbin.mysqld
并重新加载apparmor服务即可。
您应该编辑my.cnf文件是/etc/mysql/my.cnf文件。只是:
sudo nano /etc/mysql/my.cnf
然后加:
[mysqld]
local-infile
[mysql]
local-infile
头文件[mysqld]和[mysql]已经给出,只需将它们放在文件中,并在每个文件头下方添加local-infile。
它适用于我在Ubuntu 12.04 LTS上的MySQL 5.5上。
Ubuntu 14.04.2 LTS not working
。
/mysql/my.cnf
默认情况下不存在。只需创建目录和文件,然后将这些行粘贴到文件中即可。
/etc/mysql/conf.d/enable-local-infile.cnf
也不要忘记sudo service mysql restart
这样做,以使其生效。
用本机驱动程序替换驱动程序php5-mysql
在Debian上
apt-get install php5-mysqlnd
我在MySQL 8.0.11上使用mysql terminal命令解决了这个问题:
SET GLOBAL local_infile = true;
我的意思是我通常先登录:
mysql -u user -p*
之后,您可以使用以下命令查看状态:
SHOW GLOBAL VARIABLES LIKE 'local_infile';
它应该是开的。在这里,我不会写有关将本地文件加载到数据库中的安全问题。
SET GLOBAL local_infile = true;
有效。我的MySQL版本是8.0.12。也许这是最新的解决方案。非常感谢。
8.0.12 MySQL Community Server
在Windows 上,只有这个答案对我有用。
SET GLOBAL local_infile = true;
命令,但我仍然得到同样的错误ERROR 1148 (42000): The used command is not allowed with this MySQL version
,但连接到MySQL与--load-INFILE = 1的工作mysql --local-infile=1 -u root -p
如果您在ubuntu上使用的mysql风格在任何情况下均无法正常工作并且仍然出现1148错误,则可以load data infile
通过命令行运行命令
打开终端窗口
跑 mysql -u YOURUSERNAME -p --local-infile YOURDBNAME
您将被要求输入mysqluser密码
您将运行MySQLMonitor,命令提示符为 mysql>
运行您的load data infile
命令(不要忘记以分号结尾;
)
像这样:
load data local infile '/home/tony/Desktop/2013Mini.csv' into table Reading_Table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
SET GLOBAL ..
没有的时候对我有用。“源”命令(\. file.sql
)是否以某种方式启动了新会话或将其重置?我没有尝试将设置放入mmy sql脚本中。
另外,对于其他读者,如果您尝试在Django中执行此操作,并且服务器允许使用local_infile(您可以通过mysql客户端键入SHOW VARIABLES进行检查),则可以将其添加到settings.py文件中(因为python MySQLdb不能) t默认情况下读取.my.cnf文件):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'myname',
'PASSWORD': 'mypass',
'HOST': 'myserver',
'PORT': '3306',
'OPTIONS' : {
'local_infile':1,
},
}
}
您必须注意如何建立mysqli连接。此解决方案应归功于Jorge Albarenque,来源)
为了修复它,我必须:
问题在于,使用该功能可以显式启用对LOAD DATA LOCAL INFILE的支持。例如(过程样式):
$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($link, $host, $username, $password, $database);
或面向对象
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_LOCAL_INFILE, true);
$mysqli->real_connect($host, $username, $password, $database);
另一种方法是使用 mysqlimport
客户端程序。
您可以按以下方式调用它:
mysqlimport -uTheUsername -pThePassword --local yourDatabaseName tableName.txt
这会生成一条LOAD DATA
语句,并加载tableName.txt
到tableName
表中。
请注意以下几点:
mysqlimport
根据您提供的文件确定表名;使用从文件名开头到第一个句点的所有文本作为表名。所以,如果你想几个文件加载到同一个表,你可以区分它们像tableName.1.txt
,tableName.2.txt
...等,例如。
对于我来说,这有点奇怪,从一天到第二天,自几天以来一直在起作用的脚本就停止了工作。没有较新版本的mysql或任何类型的升级,但是我遇到了相同的错误,因此我最后尝试了CSV文件,并注意到行的末尾使用\ n而不是预期的(根据我的脚本)\ r \ n,因此我将其保存为正确的EOL,然后再次运行脚本而没有任何麻烦。
我认为mysql告诉我,这有点奇怪,因为原因完全不同,因此此MySQL版本不允许使用命令。
我的工作命令如下所示:
LOAD DATA LOCAL INFILE 'file-name' IGNORE INTO TABLE table-name CHARACTER SET latin1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES.
我使用了下面的方法,该方法不需要更改配置,并在mysql-5.5.51-winx64和5.5.50-MariaDB上进行了测试:
将“加载数据...”放在.sql文件中(例如:LoadTableName.sql)
LOAD DATA INFILE 'D:\\Work\\TableRecords.csv' INTO TABLE tbl1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (col1,col2);
然后:
mysql -uroot -pStr0ngP@ss -Ddatabasename -e "source D:\Work\LoadTableName.sql"
好吧,这里发生了奇怪的事情。要使此工作有效,不需要在/etc/mysql/my.cnf中进行任何配置更改。您需要做的就是在终端中重新启动当前的mysql服务:
sudo service mysql restart
然后,如果我想“重新创建”该错误,则只需重新启动apache服务即可:
sudo service apache2 restart
然后可以通过输入以下命令来修复该问题:
sudo service mysql restart
因此,似乎apache2在启动时正在做一些不允许该功能的事情(如果重新启动mysql服务,则该功能将被纠正/纠正)。
在基于Debian的发行版中有效。
service mysqld restart
service httpd restart
在基于RedHat的发行版中有效
对于那些正在寻找使LOAD DATA LOCAL
INFILE像我一样工作的答案的人,这可能可行。很好,它对我有用,所以就来了。percona
按照链接中的步骤安装为mysql服务器和客户端。在安装过程中将提示输入密码,因此请记住一个密码,以后再使用。一种安装完成,重新启动系统,并通过依次terminal
输入mysql -u root -p
和,然后输入密码来测试服务器是否已启动并正在运行。LOAD DATA LOCAL INFILE
现在尝试运行命令。希望它能起作用:)
顺便说一句,我正在Ubuntu 12.04上使用Ruby 1.9.3开发Rails 2.3。
local_infile
在client
和mysqld
部分中都添加。
[client]
local_infile=1
...
[mysqld]
local_infile=1
...
已在Windows和Linux的MySQL 8.x中进行了测试。
my.cnf
路径/etc/mysql/my.cnf
在我的机器(AWS EC2)中。