解决ERROR 1 (HY000): Can't create/write to file '/home/ubuntu/test.txt' (Errcode: 13) -Permission d...

解决ERROR 1 (HY000): Can't create/write to file '/home/ubuntu/test.txt' (Errcode: 13) -Permission denied报错

登录用户ubuntu所属组ubuntu;mysql所属组mysql
  • 爬坑记录
  1. 看到这个报错,大家想的和我估计一样,permission denied,权限不够嘛,搞起:
#先看一下导出到mysql存放data的目录是否可以,select * into outfile '/xxx/test.xls' from tablename,执行成功!
ll /xxx/test.xls  #发现导出的文件所属用户和所属用户组都是mysql;

#错的解决思路,听起来还是有道理的:将/home目录及子目录、文件的权限设置为附属组可读写;将mysql的附属组追加一个ubuntu组;这样就达到了mysql访问ubuntu目录的权限
sudo usermod -a -G ubuntu mysql  # sudo usermod 追加  附属组  组名   用户名
依然报错!!!
检查配置:id mysql  确认mysql的附属组里有ubuntu;然后我就放弃了这种想法

2.第二种失败的方法,不要直接导出到/home/ubuntu目录,先导出到/tmp目录(无意中发现可以导出到/tmp目录,当时不知道为啥),然后再move到/home/ubuntu下,搞起:

  • 直接move
mv /tmp/test.xls /home/ubuntu

当然报错! 没权限嘛! 第一步我们就知道mysql导出的文件所属用户为mysql,而要移动到ubuntu用户的目录下,肯定是权限不够,权限不够就给他权限:

sudo usermod -a -G mysql ubuntu # 给ubuntu用户操作mysql文件的权限,当然还要设置mysql文件的附属组有读写权限

我们再mv一下试试

mv /tmp/test.xls /home/ubuntu

还是报错!!! 一个小时过去了,搞不定!mv不行,那就试试cp吧

cp /tmp/test.xls /home/ubuntu

成功拷过去了,一万头草泥马,为啥?????????一个小时又过去了,突然想着,看看/tmp是个啥权限吧!

ll /tmp

/tmp附属组的权限是rwt? 本人才疏学浅,真心不知道t是什么鬼!网上一搜,t是限制删除,就是说除了root你删我都不好使!
现在好办了,最简单的办法就是修改权限

chmod -R 777 /tmp   #直接给了所有权限

这种办法吧,个人比较不喜欢,系统不让随便删里边的文件,说明里面肯定有安全上的考虑,这么做不完美!!

3.于是自己又想了一种失败的办法:自己新建一个目录,让他和他的子子孙孙都属于mysql用户和mysql用户组;然后我再修改这个文件权限,就不会涉及到误删系统文件的事儿了,搞起:

sudo mkdir -p /data/outfile
sudo chown -R mysql:mysql /data/outfile
select * into outfile '/xxx/test.xls' from tablename

直接在这就失败了,于是又回到了最开始的困境
于是有一个天大的疑问!
mysql到底能往什么目录导出文件???
在哪设置???
再次确认一下mysql配置文件里到底有没有设置导入导出权限

secure_file_priv = ''   # 没问题啊,这个的意思就是不限制导入导出

迷茫,继续找资料

selinux selinux selinux

我发现有人提到了这个挨千刀的selinux

如果是redhat、centos 可以在/etc/selinux/config 里将该服务disbled,就可以永久关闭selinux,或者setenforce临时关闭;

我这里用的是ubuntu,ubuntu也有类似的玩意!

因为Ubuntu有个AppArmor,是一个Linux系统安全应用程序,类似于Selinux,AppArmor默认安全策略定义个别应用程序可以访问系统资源和各自的特权,如果不设置服务的执行程序,即使你改了属主属组并0777权限,也是对服务起不到作用。

vim /etc/apparmor.d/usr.sbin.mysqld
service apparmor restart  # 最粗暴的方式就是把他完全stop,类似/etc/selinux/config disabled ; 但是有更好的方法就暂时留他一条性命吧。

    /data/ r,
    /data/** rwk,
sudo usermod -a -G mysql ubuntu
select * into outfile '/data/test.xls' from tablename
mv /data/test.xls /home/ubuntu

大功告成,全部手码,谨以此文献给小激动的自己!!!

你可能感兴趣的:(解决ERROR 1 (HY000): Can't create/write to file '/home/ubuntu/test.txt' (Errcode: 13) -Permission d...)