MySQL中的创建/写权限

6

我在使用SELECT ... INTO OUTFILE语句时遇到了一些权限问题。

当我登录到我的数据库并执行简单的导出命令时,例如:

mysql> select * from XYZ into outfile '/home/mropa/Photos/Desktop/TEST.txt';

我得到了回应:
ERROR 1 (HY000): 
Can't create/write to file '/home/mropa/Photos/Desktop/TEST.txt' 
(Errcode: 13)

然而,当我简单地写下:

mysql> select * from XYZ into outfile 'TEST.txt';
Query OK, 8287 rows affected (0.73 sec)

文件被写入目录/var/lib/mysql/XYZ。我查看了文件/etc/apparmor.d/usr.sbin.mysqld,mysql似乎定义了读写权限,但我不知道如何修改它。如何让自己有权限将MySQL表导出到任何喜欢的目录中?
5个回答

6
问题是目录权限。mysqld不以当前用户身份运行。将mysqld用户添加到具有目标目录写入权限的组中(方便,但不够安全),或记住在写出文件之前和之后更改目标目录权限。

@dnagirl 我通常使用命令 mysql -u mropa -p 启动 MySQL,这样用户就是 'mropa',应该具有写入权限。你能详细解释一下你的答案吗?我不是完全理解。谢谢。 - mropa
1
@mropa:当你执行 mysql -u mropa -p 时,你并没有启动 mysqld 进程,你只是登录了进去。当你写入 outfile 时,写入的不是你的登录用户,而是 mysqld 进程。想象一下,你以 mropa 的身份登录到 shell 中,然后以 mydb_user 的身份登录到 mysql 中。当你从 mysql 写入 outfile 时,既不是 mropa 也不是 mydb_user 在进行写入,而是 mysqld 进程的所有者在进行写入。 - dnagirl
你知道如何授予mysqld文件权限吗?我遇到了和@mropa一样的问题。 - user3507584

2
您可以创建一个可被运行mysqld的用户(通常为“mysql”)写入的目录,并将文件写入其中。例如:
chmod a+w /home/mropa/mysql

1

这听起来像是您没有访问那个特定文件夹的权限。您应该将mysql添加到该特定位置的组所有者中。

我不知道您正在哪个用户下运行mysql,但是在/home/mropa/Photos/Desktop/logs上运行chown mysql:mysql将意味着mysql用户和mysql组是所有者,因此具有权限。然后,您需要确保权限包括写入,但那应该足够了。

Chown命令


1
请参考https://wiki.ubuntu.com/DebuggingApparmor了解有关调试/禁用apparmor配置文件的信息。
可能不仅仅是apparmor的问题。运行mysqld的用户可能没有权限写入您指定的文件夹。请检查目标目录/文件的权限。

0

MySQL通常在用户mysqld下运行。权限问题可以直接通过apparmor解决。请参见此答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接