mysql没有写入权限_解决Errcode: 13——mysql写文件权限问题
一、问题二、权限错误(Errcode: 13)解决方法三、原理一、问题
在数据库中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‘;
当时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)
出现了没有权限写的error,解决方法可以关闭selinux,可以在/etc/selinux中找到config,root用户修改selinux配置文件
shell>vi /etc/selinux/config
# 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
修改SELINUX=disabled关闭selinux就可以了,这个问题就可以解决了。不过全部关闭SELINUX有带来一些安全问题。当然也可以,单独给mysql的守护进程权限。
shell>getsebool -a
可以查看当前的对系统一系列守护进程的权限情况。
lpd_disable_trans --> offmail_read_content --> offmailman_mail_disable_trans --> offmdadm_disable_trans --> offmozilla_read_content --> offmysqld_disable_trans --> offnagios_disable_trans --> offnamed_disable_trans --> offnamed_write_master_zones --> offnfs_export_all_ro --> onnfs_export_all_rw --> onnfsd_disable_trans --> offnmbd_disable_trans --> offnrpe_disable_trans --> off
shell>setsebool -P mysqld_disable_trans=1mysql> select user from user into outfile ‘/home/test.txt‘;
开启对mysql守护进程的权限,这样写入到自定义的目录就没有问题了。
注意:
-P表示 是永久性设置,否则重启之后又恢复预设值。
getsebool setsebool命令在root用户下有权限。
除了对selinux的权限,当然首先要保证该目录拥有读写权限。