我试图将 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:权限被拒绝”
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
检查包含 .csv 文件的目录的权限。 您需要目录的“搜索”(
x
) 权限才能查看其中的文件。
所有答案都是正确的,但对于 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 查询。