解决ERROR 1 (HY000): Can't create/write to file '/home/ubuntu/test.txt' (Errcode: 13) -Permission denied报错
登录用户ubuntu所属组ubuntu;mysql所属组mysql
- 爬坑记录
- 看到这个报错,大家想的和我估计一样,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
大功告成,全部手码,谨以此文献给小激动的自己!!!