记录解决select into outfile&load data报错ERROR 1(Errcode: 13 - Permission denied)

前言:小白一枚,记录踩过的坑,有错误的地方麻烦路过的大牛纠正一下,谢谢

问题描述

尝试将数据库里的数据通过命令select into outfile和命令load data infile
导出和导入到目录/home/mysql/下报错error1

软件版本:centos 7 和mysql 5.7

解决的思路(百度)

目标目录/home/mysql/的权限不够;
selinux的影响;
将参数secure_file_priv设置为’’(空)

设置参数secure_file_priv设置为’’(空)

vim进入mysql的配置文件修改参数secure_file_priv
按O插入 esc推出编辑 :wq!保存并退出
[root@localhost ***]# vim /etc/my.cnf
修改如:secure-file-priv=‘ ‘

查看修改后结果
mysql> show global variables like ‘%secure%’;
| secure_file_priv | |

尝试一

关闭selinux
修改目录/home/mysql/权限为mysql:mysql

1.关闭selinux

通过vim命令进入selinux的配置文件
按O插入 esc推出编辑 :wq!保存并退出

[root@localhost ***]# vim /etc/selinux/config

找到SELINUX=enforcing:将enforcing 改为 disabled
重启系统才能生效,重启时间会比较久
重启后查看selinux状态

[root@localhost ***]# sestatus;
SELinux status: disabled(现在是关闭状态)

2.查看并修改目录/home/mysql/的所有者

[root@localhost ***]# chown -R mysql:mysql /home/mysql/
[root@localhost ***]# chmod -R 711 /home/mysql/

(备注:711是参考目录/var/lib/mysql/的权限
[root@localhost ***]# ls -dl /var/lib/mysql/)

查看修改结果

[root@localhost ***]# ls -dl /home/mysql/
drwx–x--x. 2 mysql mysql (操作时间)home/mysql/

3.再次导入,ok

mysql> select * into outfile ‘/home/mysql/c.txt’ from p;
Query OK, 6 rows affected (0.14 sec)

尝试二:

1.开启selinux

通过vim命令进入selinux的配置文件
按O插入 esc推出编辑 :wq!保存并退出

[root@localhost ***]# vim /etc/selinux/config

找到SELINUX= disabled:将 disabled改为enforcing
重启系统才能生效,重启时间会比较久
重启后查看selinux状态

[root@localhost ***]# sestatus;
SELinux status: enforcing (现在是开启状态)

2.修改目录/home/mysql/的安全上下文

要让mysql能够导入/home/mysql/目录下的文件,
首先就要让mysql和/home/mysql/各自对应的安全上下文一致,
需要先确认他们各自的安全上下文
使用的命令
ls -Z 文件 查看文件的安全上下文
ls -Zd 目录 查看目录的安全上下文
ps auxZ | grep 进程 查看进程的安全上下文

/home/mysql/的安全上下文

[root@localhost ***]# ls -Zd /home/mysql/
system_u:object_r:user_home_dir_t:s0 /home/mysql/

这一行对应为:(身份字段:角色:类型:灵敏度)
拥有者系统,类型文件,安全上下文user_home_dir_t,灵敏度s0

mysql的安全上下文

[root@localhost ***]# ps auxZ |grep mysqld
system_u:system_r:mysqld_t:s0 mysql

两者的安全上下文不一致

mysql> select * into outfile ‘/home/mysql/c.txt’ from p;
ERROR 1 (HY000): Can’t create/write to file ‘/home/mysql/c.txt’ (Errcode: 13 - Permission denied)

参考mysql的数据目录修改安全上下文

[root@localhost ***]# ls -Zd /var/lib/mysql
system_u:object_r:mysqld_db_t:s0 /var/lib/mysql

使用chcon 命令:

[root@localhost ***]# chcon -Rt mysqld_db_t /home/mysql/
[root@localhost ***]# ls -Zd /home/mysql/
system_u:object_r:mysqld_db_t:s0 /home/mysql/

3.查看并修改目录/home/mysql/的权限(同尝试一)

4 再次尝试导出数据,ok

mysql> select * into outfile ‘/home/mysql/c.txt’ from p;
Query OK, 6 rows affected (0.24 sec)
导出成功

所以要操作对应的文件,要满足selinux和对用的权限
先记录下吧

非常感谢作者学到了很多,少踩很多坑)
SELinux安全上下文查看方法(超详细)
[http://c.biancheng.net/view/1149.html]

整理下命令
1 查看文件的安全上下文 ls -Z 文件
2 查看目录的安全上下文 ls -Zd 目录
3 查看进程的安全上下文 ps auxZ | grep 进程
4 编辑selinux的配置文件 vim /etc/selinux/config
5 查询SELinux的运行模式 getenforce
6 查看selinux的状态sestatus
stenforce 只能进行两种模式的切换:
[root@localhost ~]# setenforce 选项
选项:
0: 切换成 permissive(宽容模式);
1: 切换成 enforcing(强制模式);

7 安全目录解读
system_u:object_r:httpd_sys_content_t:s0:[类别]
#身份字段:角色:类型:灵敏度:[类别]

8 seinfo 查询selinux信息,命令格式如下:
[root@localhost ~]# seinfo [选项]
选项:
-u: 列出SELinux中所有的身份(user);
-r: 列出SELinux中所有的角色(role);
-t: 列出SELinux中所有的类型(type);
-b: 列出所有的布尔值(也就是策略中的具体规则名称);
-x: 显示更多的信息;

9 设置文件或目录的权限 chcon 命令,格式如下:
[root@localhost ~]# chcon [选项] 文件或目录
选项:
-R: 递归,当前目录和目录下的所有子文件同时设置;
-t: 修改安全上下文的类型字段,最常用;
-u: 修改安全上下文的身份字段;
-r: 修改安全上下文的角色字段;

10 修改目录及子文件所有者
chown -R mysql:mysql /home/mysql/
11 查看目录的权限 ls -dl /home/mysql/
12 把文件的安全上下文恢复成默认的安全上下文,restorecon 命令格式如下:
[root@localhost ~] # restorecon [选项】 文件或目录
选项:
-R:递归.当前目录和目录下所有的子文件同时恢复;
-V:把恢复过程显示到屏幕上;

13 记录下
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t “/www(/.*)?”
#这条命令会给/www/目录及目录下的所有内容设定默认安全上下文类型是httpd_sys_content_t
[root@localhost ~# semanage fcontext -l | grep “/www”
查看目录/www的默认安全上下文

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值