Mysql 8.0into outfile导出文件后,文件的权限如何修改

之前用mysql5.7,使用into outfile 导出文件,目录的权限是777,在linux服务器用shell脚本调用into outfile生成文件到指定目录,生成的文件所有者是mysql用户,文件的权限是666,
现在mysql升级为8.0版本,同样的shell脚本,同样的目录权限,使用into outfile导出的文件权限为640,导致程序没有权限操作文件,报错。请问各位同学这个导出后文件的权限在哪里设置

文件默认权限由操作系统控制(umask了解一下),使用chmod改下权限吧。修改权限可以参考:Linux文件权限:基本权限、扩展属性与所有者组_创意程序员的博客-CSDN博客

  • 这篇博客: Linux系统下MySQL的导出数据语句SELECT … INTO OUTFILE的用法中的 按默认参数设定导出表数据到文本文件中 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 数据表 student 存储的数据如下:

    mysql> select * from student;
    +----------------------+--------------+------+-------+----------+---------------------+
    | id                   | name         | age  | score | birthday | insert_time         |
    +----------------------+--------------+------+-------+----------+---------------------+
    | 00000000000000000001 | liaowenxiong |   18 |  NULL | NULL     | 2021-09-25 10:40:51 |
    | 00000000000000000002 | liudehua     |   28 |  NULL | NULL     | 2021-09-25 10:40:51 |
    | 00000000000000000003 | zhangxueyou  |   38 |  NULL | NULL     | 2021-09-25 10:40:51 |
    +----------------------+--------------+------+-------+----------+---------------------+
    3 rows in set (0.00 sec)
    

    将数据表 student 的数据导出到文件 /tmp/student.txt 中:

    mysql> select * from student into outfile '/tmp/student.txt';
    

    在命令终端中查看该文件的内容如下:

    [root@htlwk0001host ~]# cat /tmp/student.txt
    00000000000000000001	liaowenxiong	18	\N	\N	2021-09-25 10:40:51
    00000000000000000002	liudehua	28	\N	\N	2021-09-25 10:40:51
    00000000000000000003	zhangxueyou	38	\N	\N	2021-09-25 10:40:51
    

    注:\N 表示空值。

    使用图形化编辑器打开文件 /tmp/student.txt 看下:
    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    针对问题,可以尝试在使用into outfile命令导出文件后,使用chmod命令修改文件的权限。具体步骤如下:

    1. 在使用select语句导出数据时,在语句末尾加上outfle '文件路径' FIELDS terminated by ',',来指定导出文件的路径,并以逗号作为不同字段的分隔符。

    2. 执行select语句后,会在指定的文件路径下生成一个文件,用chmod命令修改该文件的权限。可以使用sudo chmod 777 文件名,将文件权限修改为777,即可实现读、写、执行权限都开放给所有用户。

    3. 修改文件权限后,即可实现程序对文件的操作,并避免因文件权限不足而导致程序出错的问题。

    综上所述,可以尝试以上步骤来解决在Mysql8.0中使用into outfile命令导出文件后权限不足的问题。

1、MySQL 8.0.17以后,创建文件的 umask 掩码是 0640 ,当前版本暂时无法修改,你作为用户,只能适应官方版本变化。

img

https://dev.mysql.com/doc/refman/8.0/en/select-into.html 中的 “Note” 处。

2、解决方案:

  • 如应用需要对导出数据文件的读写权限,应将执行shell脚本的操作系统用户换为mysql ;
  • 如应用仅需要读取权限,应将执行shell脚本的操作系统用户添加到mysql用户组内。