前言:小白一枚,記錄踩過的坑,有錯誤的地方麻煩路過的大牛糾正一下,謝謝
問題描述
嘗試將數據庫裏的數據通過命令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的默認安全上下文