【发布时间】:2019-06-18 17:31:35
【问题描述】:
我编写了一个程序,从套接字接收数据,将数据格式化为 CSV 格式,然后将数据转储到文件中; '/tmp/test_csv.csv'。
接下来,我在mysql中执行如下:
LOAD DATA INFILE '/tmp/test_csv.csv'
INTO TABLE flow_data
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
此语句输出以下错误:
Can't get stat of '/tmp/test_csv.csv' (Errcode: 2 "No such file or directory")
据我了解,mysql 无权从 /tmp 读取,这很有意义。
我正在寻找的解决方案是让 mysql 访问从 /tmp 读取,同时保留它无法在那里写入(后者是可选的)。
由于它的大小,我需要将 csv 文件转储到 /tmp(或任何其他 RAMdisk 样式目录),因此将文件转储到 mysql 数据库目录不是一个有效的解决方案。如果我的硬盘没有存储在内存中,我正在处理的数据量会导致我的硬盘(由文件和 mysql)严重竞争。
我发现/尝试过的唯一解决方案是使用 semanage 更改烫发。 https://stackoverflow.com/a/3971632/1449160 但是,我没有运气。
我还看到了一种解决方法,即使用关键字 LOCAL。但是,我不确定此解决方案的性能影响,宁愿让 mysql 直接读取文件 - 或者至少测试它是否重要。
操作系统:Fedora 30
mysql -V
mysql Ver 15.1 Distrib 10.3.12-MariaDB, for Linux (x86_64)
*编辑 文件 (/tmp/test_csv.csv) 和 sql 服务器都在同一台机器上。我知道'LOAD DATA LOCAL INFILE'也可以,但我试图让mysql直接读取文件
【问题讨论】:
-
文件的所有者是什么?文件权限一定是错误的。
mysql用户必须对加载它的文件具有读取权限。 -
sudo chown mysql test_csv.csv仍然没有运气。同样的错误 -
/tmp 权限呢?