CentOS下MySQL使用select……into outfile导出数据:Can't create/write to file ……(Errcode: 13- Permission denied)

SELECT * FROM t1_videos INTO OUTFILE '/home/xuyue/record/test.txt';

今天在CentOS使用select……into outfile命令从MySQL数据库导出文本文件时报错如下:

[Err] 1 - Can't create/write to file '/home/xuyue/test.txt' (Errcode: 13 - Permission denied)

提示没有权限向该目录写入文件,于是修改该目录的权限如下(需要将上级目录均修改权限):

[root@strong3 home]# chmod -R 777 /home/xuyue

修改之后重新运行mysql语句还是报相同的错误,经过一番查询之后发现:CentOS系统中必须将目录修改为mysql用户组才能实现文件写入,于是继续修改该目录的用户组权限如下:

[root@strong3 home]# chown mysql.mysql /home/xuyue/record

修改之后重新执行mysql语句,依然报错,有点崩溃,又经过一番挣扎之后,发现:在redhat系列的linux中selinux对哪些daemon可以进行怎么样的操作是有限制的,mysql的select into outfile的命令是mysql的daemon来负责写文件操作的,写文件之前当然要具有写文件的权限,但同时selinux对这个权限做了限制,如果 selinux是关闭的,这个命令执行是没有问题的。

所以,我们还需将selinux关闭。

查看selinux状态:

[root@dev-server ~]# getenforce
Disabled
[root@dev-server ~]# /usr/sbin/sestatus -v
SELinux status:                 disabled

临时关闭:

##设置SELinux 成为permissive模式
##setenforce 1 设置SELinux 成为enforcing模式
setenforce 0

永久关闭:

vi /etc/selinux/config
##将SELINUX=enforcing改为SELINUX=disabled, 然后重启生效

至此,数据便可以正常导出了。


猜你喜欢

转载自blog.csdn.net/u012248802/article/details/80673059