【问题标题】:MySQL : Load data infileMySQL:加载数据文件
【发布时间】:2012-09-14 09:05:12
【问题描述】:

使用加载数据插入查询时出现错误。

"load data infile '/home/bharathi/out.txt' into table Summary"

此文件在 location 中。但是 mysql 抛出以下错误。 错误 29 (HY000):找不到文件“/home/bharathi/out.txt”(错误代码:13)

show variables like 'data%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+

Data Dir 指向根权限文件夹。我无法更改此变量,因为它是 readonly 。

如何进行加载数据infile操作?

我尝试更改文件权限,加载数据本地 infile 。它不会工作。

【问题讨论】:

  • 文件在哪个系统(服务器或客户端)上?
  • 服务器和客户端或同一台机器。

标签: mysql


【解决方案1】:

如LOAD DATA INFILE Syntax 中所述:

出于安全原因,在读取位于服务器上的文本文件时,这些文件必须位于数据库目录中或可供所有人读取。此外,要在服务器文件上使用LOAD DATA INFILE,您必须拥有FILE 权限。见Section 6.2.1, “Privileges Provided by MySQL”。对于非LOCAL 加载操作,如果secure_file_priv 系统变量设置为非空目录名,则要加载的文件必须位于该目录中。

因此,您应该:

  • 确保您的 MySQL 用户具有 FILE 权限,并假设未设置 secure_file_priv 系统变量:

    • 使文件对所有人可读;或

    • 将文件移动到数据库目录中。

  • 或者,使用LOCAL 关键字让您的客户端读取文件并将其传输到服务器。但请注意:

    LOCAL 仅在您的服务器和客户端都已配置为允许它时才有效。例如,如果mysqld 以--local-infile=0 开头,则LOCAL 不起作用。见Section 6.1.6, “Security Issues with LOAD DATA LOCAL”。

【讨论】:

    【解决方案2】:

    真正对我有用的解决方案是:

    sudo chown mysql:mysql /path/to/the/file/to/be/read.csv
    

    添加它以供将来参考。

    【讨论】:

      猜你喜欢
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      相关资源
      最近更新 更多