【问题标题】:load records into mysql table from csv从 csv 将记录加载到 mysql 表中
【发布时间】:2021-04-26 01:50:21
【问题描述】:

我在 ubuntu 服务器上运行 mysql v8.0.24。我在数据库 stock 中创建了一个名为 uranium 的表。我现在尝试以 root 身份在 mysql 中运行以下命令,以将服务器上 csv 中的记录加载到表中。我收到下面的错误,有人知道问题可能是什么吗?您能建议如何解决它吗?

代码:

LOAD DATA INFILE '/home/user/uranium.csv' INTO TABLE stocks.uranium FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;

错误:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

【问题讨论】:

  • 加载数据本地文件有帮助吗? “本地”

标签: mysql ubuntu-server


【解决方案1】:

默认情况下,MySQL 设置了secure_file_priv,它限制了它将访问的目录以进行 INFILE 和 OUTFILE 操作。您可以通过编辑 mysql.cnf*[mysqld] 部分来设置 MySQL 配置以允许指定文件夹。

Ubuntu 还运行 AppArmor,即使它具有正确的权限,它也会阻止 MySQL 看到该文件。你也需要更新它。

因此,我建议您为此类导入创建一个专用目录,而不是使用主目录。出于此答案的目的,我使用了/sqlfiles

对于 Ubuntu 和其他 Debian 派生版本的 Linux,请转到 /etc/mysql/mysql.conf.d 使用您最喜欢的编辑器,编辑您在那里找到的文件mysql.cnf。 (在 /etc/mysql 目录的其他地方还有其他同名的文件。请确保您正在编辑正确的文件)

[mysqld] 部分的末尾添加一行

secure-file-priv=/sqlfiles

保存文件,然后创建文件夹并将所有权设置为mysql

sudo mkdir /sqlfiles
sudo chown mysql:mysql /sqlfiles

现在更新 AppArmor 配置文件。转到/etc/apparmor.d/local 并编辑文件usr.sbin.mysqld。将这些行添加到该文件的末尾:

/sqlfiles/ r,
/sqlfiles/** rwk,

最后,重启 AppArmor

sudo service apparmor restart

这适用于我运行 Ubuntu 20.04、MySQL 8.0.24 的开发服务器

祝你好运!

* 如果您在mysql.cnf 中创建条目但将文件名留空,您将禁用变量的效果,MySQL 将读取或写入任何文件夹。 AppArmor 仍然会阻止访问,除非您也更新它。

【讨论】:

    【解决方案2】:

    Look at this answer

    尽管您的 csv 文件位于服务器的文件系统中,但我认为您应该包含 LOCAL 关键字:

    LOAD DATA LOCAL INFILE ...
    

    或者

    该文件必须位于数据库目录中或具有世界 读取权限,并且客户端用户名必须具有 FILE 特权。

    我认为你的 csv 文件不是

    ...位于数据库目录或具有全局读取权限...

    注意

    ...客户端用户名必须具有 FILE 权限...

    MySql8 文档:docdoc

    LOAD DATA INFILE 从数据库服务器的本地获取文件 文件系统。该文件必须位于数据库目录中或 具有世界读取权限,并且客户端用户名必须具有 文件权限。

    LOAD DATA LOCAL INFILE 在客户端读取文件,并发送 内容到服务器。

    您可以在文档中找到更多详细信息。

    If LOCAL is specified, the file is read by the client program on the client host and sent to the server.
    
    If LOCAL is not specified, the file must be located on the server host and is read directly by the server.
    

    归功于barmartim-biegeleisen

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      相关资源
      最近更新 更多