之前用mysql5.7,使用into outfile 导出文件,目录的权限是777,在linux服务器用shell脚本调用into outfile生成文件到指定目录,生成的文件所有者是mysql用户,文件的权限是666,
现在mysql升级为8.0版本,同样的shell脚本,同样的目录权限,使用into outfile导出的文件权限为640,导致程序没有权限操作文件,报错。请问各位同学这个导出后文件的权限在哪里设置
文件默认权限由操作系统控制(umask了解一下),使用chmod改下权限吧。修改权限可以参考:Linux文件权限:基本权限、扩展属性与所有者组_创意程序员的博客-CSDN博客
数据表 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
看下:
针对问题,可以尝试在使用into outfile命令导出文件后,使用chmod命令修改文件的权限。具体步骤如下:
在使用select语句导出数据时,在语句末尾加上outfle '文件路径' FIELDS terminated by ',',来指定导出文件的路径,并以逗号作为不同字段的分隔符。
执行select语句后,会在指定的文件路径下生成一个文件,用chmod命令修改该文件的权限。可以使用sudo chmod 777 文件名,将文件权限修改为777,即可实现读、写、执行权限都开放给所有用户。
修改文件权限后,即可实现程序对文件的操作,并避免因文件权限不足而导致程序出错的问题。
综上所述,可以尝试以上步骤来解决在Mysql8.0中使用into outfile命令导出文件后权限不足的问题。
1、MySQL 8.0.17以后,创建文件的 umask 掩码是 0640 ,当前版本暂时无法修改,你作为用户,只能适应官方版本变化。
https://dev.mysql.com/doc/refman/8.0/en/select-into.html 中的 “Note” 处。
2、解决方案: