如何更正MySQL加载错误

时间:2013-04-29 18:40:01

标签: mysql csv import load local

我不太确定类似的问题是由于我试图执行以下MySQL程序而关闭的。

mysql -e "load data local infile \
'/tmp/ept_inventory_wasp_export_04292013.csv' into \
table wasp_ept_inv fields terminated by ',' \
lines terminated by '\n' ;"

在bash命令行中出现此错误

ERROR 1148 (42000) at line 1: The used command is not allowed with this MySQL version

我该如何解决这个问题?

我实际上是从Python程序中运行此命令,但是将命令拉出来尝试在bash命令行中摆弄它。

我已经看过如何修改my.cnf(local-infile),但如果我可以避免,我不希望全局变化。

这是MySQL版本。

mysql Ver 14.14 Distrib 5.5.31, for debian-linux-gnu (i686) using readline 6.2

4 个答案:

答案 0 :(得分:48)

解决方法是修改命令行mysql -e以传递--local-infile=1参数,如下所示:

mysql --local-infile=1 -u username -p `

然后再次运行LOAD DATA LOCAL INFILE命令。

答案 1 :(得分:31)

正如Security Issues with LOAD DATA LOCAL所述:

  

为了解决这些问题,我们更改了从MySQL 3.23.49和MySQL 4.0.2(Windows上的4.0.13)处理LOAD DATA LOCAL的方式:

     
      
  • 默认情况下,二进制发行版中的所有MySQL客户端和库都使用--enable-local-infile选项进行编译,以便与之前的MySQL 3.23.48兼容。

  •   
  • 如果您从源构建MySQL但未使用--enable-local-infile选项调用configure,则任何客户端都不能使用LOAD DATA LOCAL,除非明确写入以调用mysql_options(... MYSQL_OPT_LOCAL_INFILE, 0)。请参阅Section 20.6.6.49, “mysql_options()

  •   
  • 您可以通过使用LOAD DATA LOCAL选项启动mysqld来停用服务器端的所有--local-infile=0语句。

  •   
  • 对于mysql命令行客户端,请通过指定--local-infile[=1]选项启用LOAD DATA LOCAL,或使用--local-infile=0选项将其禁用。对于mysqlimport,默认情况下本地数据文件加载是关闭的;使用--local-L选项启用它。无论如何,成功使用本地加载操作需要服务器允许它。

  •   
  • 如果您在Perl脚本中使用LOAD DATA LOCAL或从选项文件中读取[client]组的其他程序,则可以将local-infile=1选项添加到该组。但是,为了避免对不理解local-infile的程序造成问题,请使用loose-前缀指定它:

    [client]
    loose-local-infile=1
    
  •   
  • 如果在服务器或客户端中禁用了LOAD DATA LOCAL,则尝试发出此类语句的客户端会收到以下错误消息:

         
        

    ERROR 1148: The used command is not allowed with this MySQL version

      
  •   

答案 2 :(得分:8)

需要在服务器和客户端上启用

local-infile。您可以通过将local-infile = 1添加到每个端的my.cnf(Unix)或my.ini(Windows)文件中的相应部分来完成此操作。例如,在客户端:

[client]
local-infile = 1

您还可以通过设置系统变量local_infile

在运行时在运行时启用此功能
SET GLOBAL local_infile=1;

但是,您仍需要在客户端上启用它。您可以在运行时通过向mysql命令添加命令行参数来执行此操作:

mysql --local-infile=1 ...

如果您使用的是Amazon Web Services RDS,则可以通过编辑或创建参数组来配置服务器设置。查找local_infile参数。应用更改后,您可能需要重新启动服务器。

答案 3 :(得分:0)

我的猜测是你的MySQL服务器没有启用LOAD DATA LOCAL。请参阅MySQL文档的这一部分:

  

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

     

错误1148:此MySQL版本不允许使用的命令

以下是我从中获取此页面的链接:

http://dev.mysql.com/doc/refman/5.5/en/load-data-local.html