LOAD DATA LOCAL INFILE 有时仅适用

Posted

技术标签:

【中文标题】LOAD DATA LOCAL INFILE 有时仅适用【英文标题】:LOAD DATA LOCAL INFILE only works sometimes 【发布时间】:2011-05-06 11:24:55 【问题描述】:

我有一个可以在 mysql 终端中正常工作的 LOAD DATA 命令。它在我的本地服务器提供的测试 php 文件中运行良好。它在同一台服务器上的 phpMyAdmin 中运行良好。在同一台服务器上从 Magento 运行时,它会莫名其妙地崩溃。

我已确认所有方法都使用相同的登录凭据。如果我从查询日志中复制失败的命令(包括从连接开始的所有先前查询)并粘贴到任何其他方法中,它就会神秘地再次起作用。查询本身不能出错。

因此我推断问题一定是权限问题。文件权限已设置并适用于同一帐户上的其他实现。 Magento 使用 pdo_mysql 作为连接。如果我在测试文件中复制它,它就可以工作。 Magento 必须设置一些干扰参数。

我得到的错误是SQLSTATE[42000]: Syntax error or access violation: 1148 The used command is not allowed with this MySQL version。我必须使用“LOCAL”修饰符关键字,因为我不能保证可以访问数据库服务器。

SO concerns drupal 上最近的上一个问题,错误是不同的,但我记得 drupal 也使用 pdo_mysql 连接,也许它是相关的。 Magento is this thread 上唯一提到此错误的另一个提及,该错误在 LOAD DATA LOCAL INFILE 命令上也失败。

【问题讨论】:

你能发布哪些具体内容失败了吗? 开启sql登录看看会发生什么。您应该能够跟踪 sql 调用并确定是否发生了奇怪的事情。还要检查登录名,也许您有 2 个登录名,一个用于“localhost”,一个用于“%”,每个都具有不同的权限,加载 infile 必须设置正确的权限。 @DeveloperChris。寻找主机 '%' 的好建议,但遗憾的是不存在。只有一个帐户可以访问这个特定的数据库,当然也是 root,但我不使用它。 【参考方案1】:

根据@DeveloperChris 的建议,您可以在 Magento 中的 Varien_Db_Adapter_Pdo_Mysql 类(在 lib\Varien 路径中)启用 SQL 日志记录。将$_debug$_logAllQueries 类变量更改为true。您还可以更改在$_debugFile 中记录查询的文件路径。

不要忘记在生产前将其关闭!

HTH, 京东

【讨论】:

SQL 日志显示与主查询日志相同。将查询从任一日志复制粘贴到终端都可以。

以上是关于LOAD DATA LOCAL INFILE 有时仅适用的主要内容,如果未能解决你的问题,请参考以下文章

mysql load data local infile问题

Load data local infile 实验报告

使用 LOAD DATA LOCAL INFILE,sysbench 导数速度提升30%

Load data local infile 实验报告

LOAD DATA LOCAL INFILE 不导入任何记录

LOAD DATA LOCAL INFILE 在 RDS 中不起作用