【问题标题】:How can I correct MySQL Load Error如何纠正 MySQL 加载错误
【发布时间】:2013-04-23 13:05:14
【问题描述】:

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

【问题讨论】:

    标签: mysql csv import load local


    【解决方案1】:

    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 及之前的版本。

    • 1234563见Section 20.6.6.49, “mysql_options()
    • 您可以从服务器端禁用所有LOAD DATA LOCAL 语句,方法是使用--local-infile=0 选项启动mysqld

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

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

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

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

    【讨论】:

    • 这对我一点帮助都没有。我想要一个解决方法。我把local-infile放在my.cnf中,这并没有改变错误。我使用安装时提供的语句启动 MySQL。我没有做任何特别的事情。您的回答仍然没有提供解决方法,因为我没有专门禁用任何东西。
    • @octopusgrabbus 如果它根本没有帮助你,那你为什么要接受这个答案呢?你为什么不接受你自己的答案???
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 这可是有效的:mysql -u username -p --local-infile db -A
      【解决方案4】:

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

      【讨论】:

      • SET local_infile=1; 将在较新的 MySQL 版本上失败。
      • SET GLOBAL local_infile=1; 是为我做的。
      猜你喜欢
      • 1970-01-01
      • 2017-09-28
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 2015-02-25
      • 2010-10-18
      相关资源
      最近更新 更多