MySQL SELECT into outfile 文件被锁定

MySQL SELECT into outfile 文件被锁定

我在 Ubuntu 18.04 上运行的程序执行select 语句放入输出文件中进入我的 /home/tmp 目录,但 mysql 创建的所有文件都被锁定。我可以手动解锁它们,但我们的程序需要在创建文件后立即读取文件,因此我需要在创建时解锁它们。

我已经将文件夹权限设置为 777,但所有新创建的文件仍然被锁定。这些文件归 mysql 服务器所有,“其他”用户没有访问权限。我无法更改这些权限,因为它们不属于我。

正在运行的 mysql 服务器是 v8.0.18

在 my.cnf 中,我已将 secure_file_priv 设置为此 /home/tmp 文件夹路径。

我们在另一台计算机上使用 mysql 服务器 5.7.27 运行相同的程序,并且文件没有锁定在那里,所以我不确定问题是什么。

请帮忙!谢谢。

编辑:澄清

  • “锁定”是指在文件中查看该文件时,该文件的图标上有一个挂锁符号。
  • 尝试打开文件时收到的错误消息显示“访问“/home/tmp/filename”被拒绝。
  • 我的选择语句类似于“ SELECT * INTO OUTFILE '/home/tmp/file.csv' 字段终止于 ',' 可选地包含于 '"' 行终止于 '\n' FROM 设备 ”

答案1

您已经从 MySQL 文档中看到了此注释(请参阅https://dev.mysql.com/doc/refman/8.0/en/select-into.html):

从 MySQL 8.0.17 开始,文件创建的 umask 为 0640;您必须有足够的访问权限才能操作文件内容。在 MySQL 8.0.17 之前,umask 为 0666,服务器主机上的所有用户都可以写入该文件。

因此,这些文件只能被 MySQL 运行的组读取。您可以将您的用户添加到该组,但这可能会提供超出所需的访问权限(例如,直接访问数据库数据文件)。

如果您的文件系统支持 ACL(大多数支持),另一个选择是查看默认 ACL 是否会覆盖 MySQL 设置的权限,请尝试如下操作(在转储写入的目录上):

sudo setfacl -m 'd:u:«YOUR-USER»:r' /home/tmp

这会将“默认”ACL 设置为自动将 ACL 放在创建的任何文件上,以/home/tmp允许“您的用户”读取它们。如果您也需要写信给他们,您可以使用rw

相关内容