MariaDb 访问文件系统

问题描述 投票:0回答:3

我试图将 CSV 文件读入 MariaDb 并收到一条错误消息,显示“权限被拒绝”。 你能告诉我我做错了什么吗(请参阅下面的详细信息)?

我在 OSX High Serra 上运行 MariaDb 10.2.6。 我以“root”@“localhost”身份登录 MariaDb。 我已授予“root”@“localhost”文件权限。用户“root”@“localhost”正在使用安全插件“unix_socket”。

我已经使用 CONNECT 存储引擎创建了一个表,如下所示:

create table twins (
  ABOT double,
  SCLK double,
  LMST varchar(30),
  LTST varchar(30),
  UTC varchar(30),
  HORIZONTAL_WIND_SPEED double,
  VERTICAL_WIND_SPEED double,
  WIND_DIRECTION double,
  AIR_TEMP double)
engine=CONNECT table_type=CSV file_name='twins_calib_8066_01.csv'
header=1;

我想读取的文件的权限是:

-rw-r--r--   1 ssackett  everyone    873837 Mar 20 11:29 twins_calib_8066_01.csv

当我发出 SQL:select * from twins;

我收到错误消息:

错误 1296 (HY000):从 CONNECT 收到错误 174“twins_calib_8066_01.csv 上的 Open() 错误 13:权限被拒绝”

mysql file mariadb
3个回答
0
投票

CSV存储引擎不允许UPDATE或DELETE,但允许INSERT,因此mysqld需要对文件有写权限,否则无法打开它。

但是您的 CSV 文件归 ssacckett 所有,而不是“mysql”(或您的 mysqld 运行的任何 uid),因此它不能由 mysqld 进程写入。

尝试:

sudo chown mysql:mysql twins_calib_8066_01.csv

将其更改为 mysqld 进程运行的用户和组。

或者,将文件模式更改为所有人可写:

chmod 666 twins_calib_8066_01.csv

0
投票

检查包含 .csv 文件的目录的权限。 您需要目录的“搜索”(

x
) 权限才能查看其中的文件。


0
投票

所有答案都是正确的,但对于 MariaDB 新手(我也是)来说,缺少了一些东西。

所以...

当文件指定为文件名时,插件(是的,mariadbd 守护进程插件,不是 mariadb 客户端,可能在包含所需文件的文件夹中运行)在自己的文件夹中搜索它。就我而言是

/var/lib/mysql/./<database name>/

同样适用于相对路径,例如“../files/test.dbf”的“./folder/file.dbf”。 将文件放在那里似乎是个坏主意。至少因为只有 mysql:mysql 的访问权限。

所以需要绝对路径。但主文件夹(/home/user)可能仅具有所有者的权限。子文件夹的访问权限是什么并不重要。 第一个快速解决方案 - 将导入的文件放入 /tmp 等

file='/tmp/somefile.csv' 

会起作用的。

或者创建一些可以访问用户/组 mysql 的路径。

此外,对于 DBF,随着它的出现,不仅需要读取访问权限,还需要写入访问权限,尽管 CONNECT 具有只读选项,并且只有 SELECT 查询。

© www.soinside.com 2019 - 2024. All rights reserved.