美文网首页
Can't create/write to file 'xxxx

Can't create/write to file 'xxxx

作者: 冬日大草原的黄昏 | 来源:发表于2020-10-10 11:37 被阅读0次

    问题说明:

    在进行mysql数据导出到文件时,指定了其他的磁盘目录,导致执行sql时出现
    Can't create/write to file 'xxxx.txt' (Errcode: 13 - Permission denied) 的报错。

    原因分析:

    该报错表示权限不对,但是我明明给了 chmod -R 777、chown -R mysql.mysql的权限,重启msyql后还是报错。
    我的系统是ubunbu16.04,在ubuntu下有一个apparmor服务,apparmor用来控制应用的权限,所以如果mysql需要指定除默认路径外的其他路径时,也需要修改apparmor的相关权限

    解决方法:

    一、备份/etc/apparmor.d/usr.sbin.mysqld文件,注意需要将这个文件备份到其他地方,如果还是备份在/etc/apparmor.d/目录下会导致冲突,该目录下不是以文件后缀名来识别的。
    cp /etc/apparmor.d/usr.sbin.mysqld /tmp/
    
    二、以下是该文件内容:vim /etc/apparmor.d/usr.sbin.mysqld
    # vim:syntax=apparmor
    # Last Modified: Tue Feb 09 15:28:30 2016
    #include <tunables/global>
    
    /usr/sbin/mysqld {
      #include <abstractions/base>
      #include <abstractions/nameservice>
      #include <abstractions/user-tmp>
      #include <abstractions/mysql>
      #include <abstractions/winbind>
    
    # Allow system resource access
      /sys/devices/system/cpu/ r,
      capability sys_resource,
      capability dac_override,
      capability setuid,
      capability setgid,
    
    # Allow network access
      network tcp,
    
      /etc/hosts.allow r,
      /etc/hosts.deny r,
    
    # Allow config access
      /etc/mysql/** r,
    
    # Allow pid, socket, socket lock file access
      /var/run/mysqld/mysqld.pid rw,
      /var/run/mysqld/mysqld.sock rw,
      /var/run/mysqld/mysqld.sock.lock rw,
      /run/mysqld/mysqld.pid rw,
      /run/mysqld/mysqld.sock rw,
      /run/mysqld/mysqld.sock.lock rw,
    
    # Allow execution of server binary
      /usr/sbin/mysqld mr,
      /usr/sbin/mysqld-debug mr,
    
    # Allow plugin access
      /usr/lib/mysql/plugin/ r,
      /usr/lib/mysql/plugin/*.so* mr,
    
    # Allow error msg and charset access
      /usr/share/mysql/ r,
      /usr/share/mysql/** r,
    
    # Allow data dir access
      /var/lib/mysql/ r,
      /var/lib/mysql/** rwk,
    
    # Allow data files dir access
      /var/lib/mysql-files/ r,
      /var/lib/mysql-files/** rwk,
    
    # Allow keyring dir access
      /var/lib/mysql-keyring/ r,
      /var/lib/mysql-keyring/** rwk,
    
    # Allow log file access
      /var/log/mysql.err rw,
      /var/log/mysql.log rw,
      /var/log/mysql/ r,
      /var/log/mysql/** rw,
    
      # Site-specific additions and overrides. See local/README for details.
      #include <local/usr.sbin.mysqld>
    }
    
    
    三、修改其中的# Allow data files dir access处如下
      /data1/mysql_data_dir/ r,
      /data1/mysql_data_dir/** rwk,
    

    其中 /data1/mysql_data_dir/为你自定义的路径

    四、然后重启apparmor服务
    systemctl restart apparmor
    

    再重新尝试做导出文件的操作,应该是可以了。
    其他的比如ubuntu下迁移mysql数据路径也是要修改apparmor的权限的。

    相关文章

      网友评论

          本文标题:Can't create/write to file 'xxxx

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