美文网首页
解决ERROR 1 (HY000): Can't create/

解决ERROR 1 (HY000): Can't create/

作者: SugeonYen | 来源:发表于2019-12-24 21:08 被阅读0次

    解决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/

          本文链接:https://www.haomeiwen.com/subject/qczfoctx.html