尝试将文件加载到数据库中。
CREATE TEMPORARY TABLE IF NOT EXISTS tt_emails (
id INT PRIMARY KEY AUTO_INCREMENT,
util_account_id VARCHAR(40) NULL,
email VARCHAR(344) NOT NULL,
optout INT NOT NULL
);
LOAD DATA INFILE '/shared/implementation/emails.tsv'
INTO TABLE tt_emails (util_account_id, email, optout);
emails.tsv文件有3列,而我制作的临时表有4.我不确定这是否是正确的语法;我在第4列中添加了一个id主键列。
运行此代码时出现以下错误:
ERROR 13 (HY000): Can't get stat of '/nfs/shared/implementation/ngma/CO-48812_NGMA_Load_email/exclude_emails.tsv' (Errcode: 13)
答案 0 :(得分:0)
这是unix / linux文件系统权限问题。
操作系统不允许操作系统用户访问指定文件。
文件路径中每个目录的权限必须至少为read + execute,并且必须至少读取文件本身的权限。
尝试访问该文件的OS用户是运行MySQL Server进程的unix / linux用户帐户。 (这经常是" mysql",但它不一定非,它实际上取决于MySQL的安装和设置方式。
在mysql服务器主机上的shell提示符下,运行
ps -ef | grep mysqld
输出应包含一行包含mysqld的行。例如:
mysql 2247 1233 0 Mar21 ? 00:24:09 /opt/mysql/bin/mysqld --basedir=/opt/...
输出中的第一个字段显示运行MySQL服务器的OS用户。在这种情况下,它是OS用户" mysql"
如果我们以" mysql"的身份登录操作系统,或者执行" su - mysql"要切换到该用户,我们将尝试访问该文件时遇到相同的权限问题。
/nfs/shared/implementation/ngma/CO-48812_NGMA_Load_email/exclude_emails.tsv
文件的权限不允许操作系统用户" mysql"读取文件,或文件上方目录的权限不允许"读取+执行"由OS用户" mysql"。
需要适当更改目录和文件的权限。
作为一个kludgy解决方法,将文件复制到/ tmp(从shell提示符,以具有"读取"文件的权限的OS用户身份登录)。 / tmp目录应该允许"读取+执行"每个人,包括操作系统用户" mysql"
cp /nfs/shared/implementation/ngma/CO-48812_NGMA_Load_email/exclude_emails.tsv /tmp/
然后您可以更改文件的权限以允许操作系统用户" mysql"阅读文件。为了使文件可供所有人阅读:
chmod ugo+r /tmp/exclude_emails.tsv
然后连接到MySQL服务器并尝试修改引用新的/tmp/exclude_emails.tsv文件的LOAD DATA。
你的另一个选择当然是在原始文件上适当地设置权限(以便" mysql"用户(或任何运行的OS用户mysqld)具有必要的权限,并且在所有路径中的目录。
总结一下......这不是MySQL服务器的问题。操作系统权限存在问题,禁止访问mysql OS用户尝试执行的文件。