26

我不太确定我正在尝试执行以下 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

4 回答 4

48

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

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

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

于 2013-04-29T18:55:22.010 回答
31

安全问题中所述LOAD DATA LOCAL

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

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

  • 如果您从源代码构建 MySQL 但不使用该--enable-local-infile选项调用 configure ,LOAD DATA LOCAL则任何客户端都不能使用它,除非它明确写入 invoke mysql_options(... MYSQL_OPT_LOCAL_INFILE, 0)。请参阅第 20.6.6.49 节,“<code>mysql_options()”</a>。

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

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

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

    [客户]
    松散本地文件 = 1
    
  • 如果LOAD DATA LOCAL在服务器或客户端中禁用,则尝试发出此类语句的客户端会收到以下错误消息:

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

于 2013-04-29T18:44:59.080 回答
10

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参数。应用更改后,您可能需要重新启动服务器。

于 2013-12-21T02:17:02.587 回答
0

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

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

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

这是我从中获得的页面的链接:

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

于 2013-04-29T18:50:26.367 回答