当前位置:   article > 正文

mysql没有写入权限_解决Errcode: 13——mysql写文件权限问题_error: 13 (权限不够)

error: 13 (权限不够)

mysql没有写入权限_解决Errcode: 13——mysql写文件权限问题

一、问题

在数据库中select * into outfile ‘/home/mysql/data.sql‘,mysql又提示错误:ERROR 1 (HY000): Can‘t create/write to file ‘/home/mysql/data.sql‘ (Errcode: 13)

二、权限错误(Errcode: 13)解决方法

1)查看导出目录的权限 是否有mysql用户写的权限
2)如果有多级目录,要确保到处目录的上级目录有可执行权限,如果是/root目录 700要修改705 否则写不进
3)查看seLinux有没有关闭 ,如果没有关闭可以 setsebool -a 看看 然后 确保 setsebool -P mysqld_disable_trans=1

三、原理

在red hat系列的linux中selinux对哪些daemon可以进行怎么样的操作是有限制的,mysql的select into outfile的命令是mysql的daemon来负责写文件操作的。写文件之前当然要具有写文件的权限。而selinux对这个权限做了限制。如果selinux是关闭的吧,这个命令执行是没有问题的

mysql> select user from user into outfile ‘/home/test.txt‘;
  • 1

当时selinux开启时,selinux对mysql的守护进程mysqld进行了限制。

mysql> select user from user into outfile ‘/home/test.txt‘;
ERROR 1 (HY000): Can‘t create/write to file ‘/home/test.txt‘ (Errcode: 13)
  • 1
  • 2

出现了没有权限写的error,解决方法可以关闭selinux,可以在/etc/selinux中找到config,root用户修改selinux配置文件

shell>vi /etc/selinux/config
  • 1
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

修改SELINUX=disabled关闭selinux就可以了,这个问题就可以解决了。不过全部关闭SELINUX有带来一些安全问题。当然也可以,单独给mysql的守护进程权限。

shell>getsebool -a

可以查看当前的对系统一系列守护进程的权限情况。

lpd_disable_trans --> off
mail_read_content --> off
mailman_mail_disable_trans --> off
mdadm_disable_trans --> off
mozilla_read_content --> off
mysqld_disable_trans --> off
nagios_disable_trans --> off
named_disable_trans --> off
named_write_master_zones --> off
nfs_export_all_ro --> on
nfs_export_all_rw --> on
nfsd_disable_trans --> off
nmbd_disable_trans --> off
nrpe_disable_trans --> off
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
shell>setsebool -P mysqld_disable_trans=1
mysql> select user from user into outfile ‘/home/test.txt‘;
  • 1
  • 2

开启对mysql守护进程的权限,这样写入到自定义的目录就没有问题了。

注意:
-P表示 是永久性设置,否则重启之后又恢复预设值。
getsebool setsebool命令在root用户下有权限。
除了对selinux的权限,当然首先要保证该目录拥有读写权限。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/949793
推荐阅读
相关标签
  

闽ICP备14008679号