記錄解決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的默認安全上下文



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章