【问题标题】:LOAD DATA INFILE Directory StructureLOAD DATA INFILE 目录结构
【发布时间】:2013-09-27 18:07:46
【问题描述】:

我一直在互联网上搜索并尝试解决这个问题几个小时,最后屈服并决定直接寻求帮助。

我正在运行一个 linux 专用服务器,需要通过运行从主机上的 php 页面执行的 mysql 查询来将数据加载到我的 mysql 数据库中。

我遇到的问题是我不知道目录结构需要是什么样子才能真正找到我的文件并将其上传。下面我举个例子。

LOAD DATA INFILE 'WHAT IN THE WORLD GOES HERE TO MAKE THIS WORK?' 
INTO TABLE customers

每次我尝试运行时返回的错误是

Error Code: 1045. Access denied for user

我已经检查了权限,并且用户对相应的数据库拥有完整的权限。根据我自己的研究,我发现它可能会由于几个原因引发此错误,其中一个原因是它找不到我要上传的文件。

进入public_html文件夹后我的文件结构如下:

reports/uploads/fileName.csv

提前感谢您的帮助!这一直让我发疯。如果我只是以完全错误的方式做这件事,或者有更简单的方法来完成我正在做的事情,我也愿意接受这方面的建议。

【问题讨论】:

标签: php mysql


【解决方案1】:

documentation中所述:

  • 如果文件名是绝对路径名,服务器将使用它。
  • 如果文件名是包含一个或多个前导组件的相对路径名,则服务器会搜索相对于服务器数据目录的文件。
  • 如果给出的文件名没有前导组件,则服务器会在默认数据库的数据库目录中查找该文件。

public_html 文件夹无关紧要,因为 MySQL 服务器正在读取该文件。如果您的网络服务器和数据库服务器是不同的机器,并且您尝试从客户端而不是服务器加载文件,则需要使用LOAD DATA LOCAL INFILE 来指定。然后文件名将相对于客户端应用程序的工作目录进行解释。

【讨论】:

    【解决方案2】:

    一些想法:要在服务器上存在的文件上使用 LOAD DATA INFILE,执行加载数据的用户必须具有 FILE 权限。如果文件存在客户端,请使用 LOAD DATA LOCAL INFILE。

    这个链接很有用:http://dev.mysql.com/doc/refman/5.1/en/load-data.html

    通常最好使用位于易于访问的位置(例如 /tmp)的文件来测试 LOAD FILE,以确认权限是否正常。然后就可以开始调试对真实文件所在位置的访问问题了。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 2012-10-05
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多