1. 程式人生 > >解決select ... into outfile '..' mysql寫檔案許可權問題

解決select ... into outfile '..' mysql寫檔案許可權問題

select * from test into outfile '/home/user/test.txt' 
在linux(centos)下 ,啟動了mysql 並給使用者檔案讀寫的權利
grant file on *.* to [email protected];
在linux系統上,目錄的許可權全部是 rwxrwxrwx
chmod 777 ...
/home/user/test
drwxrwxrwx 4 root root 4096 Sep 3 18:42 home
drwxrwxrwx 10 mapuser mapuser 4096 Sep 4 03:41 user
drwxrwxrwx 5 mapuser mapuser 4096 Sep 3 17:57 test
在mysql下輸入
select * from test into outfile '/home/user/test.txt'
出現錯誤資訊:
ERROR 1 (HY000): Can't create/write to file '/home/user/test.txt' (Errcode: 13)
當時如果是tmp目錄的話就不會有這個錯誤
select * from test into outfile '/tmp/test.txt'
Query OK, 0 rows test(0.00 sec)
難道只能是tmp目錄嗎?
有什麼地方可以修改的嗎?
後來吧home的所有者改成了mysql
drwxrwxrwx 5 mysql mysql 4096 Sep 4 10:08 home
select * from test into outfile '/home/test.txt'
ERROR 1 (HY000): Can't create/write to file '/home/test.txt' (Errcode: 13)
也是同樣出錯。
這個有什麼辦法可以寫入home目錄下面嗎?或者其他什麼目錄,只要不是tmp目錄,有人說先寫入tmp目錄,再cp到想要的
目錄,這樣做是可以,不過比較麻煩,檔案比較大,2-3G呢,
修改mysql的配置能實現嗎?還是修改檔案的許可權,這個是什麼問題呢? 
select * from test into outfile '/tmp/test.txt'
Query OK, 0 rows test(0.00 sec)
看一下產生的這個檔案的owner 是誰。
[
[email protected]
/]# ls -l drwxrwxrwx 4 root root 4096 9月 4 21:03 home drwxrwxrwt 10 root root 4096 9月 4 21:03 tmp [[email protected] /]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 27 Server version: 5.1.14-beta MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select user from user; +--------+ | user | +--------+ | system | | root | +--------+ 2 rows in set (0.03 sec) mysql> select user from user into outfile '/home/test.txt'; Query OK, 2 rows affected (0.02 sec) [
[email protected]
home]# ls -l -rw-rw-rw- 1 mysql mysql 12 9月 4 21:12 test.txt [[email protected] home]# cat /home/test.txt system root select * from test into outfile '/home/test.txt' ERROR 1 (HY000): Can't create/write to file '/home/test.txt' (Errcode: 13) ------------------------ 從Errcode: 13來看是沒許可權 你執行上面語句時,是用什麼使用者執行的呢?檢查下這個使用者是否有許可權吧 估計和許可權沒關係,因為已經是777了。 看看是不是selinux打開了,如果沒什麼特別需要的話,關了為好。 非root使用者,在mysql下執行的select * from test into outfile '/home/user/test.txt' select * from test into outfile '/home/user/test.txt'該語句產生的檔案是 -rw-rw-rw- 1 mysql mysql 12 9月 4 21:12 test.txt mysql組的mysql使用者的。 貌似和許可權沒什麼關係,我用root使用者登陸系統,執行mysql的語句,其結果還是一樣,寫入/home目錄時 select * from test into outfile '/home/test.txt' ERROR 1 (HY000): Can't create/write to file '/home/test.txt' (Errcode: 13) 還是有這個問題。 selinux會阻止其他程式寫入操作?? 具體怎麼改變一下selinx的配置呢 我理清是什麼問題了。 在red hat系列的linux中selinux對哪些daemon可以進行怎麼樣的操作是有限制的,mysql的select into outfile的命令是mysql的daemon來負責寫檔案操作的。寫檔案之前當然要具有寫檔案的許可權。而selinux對這個許可權做了限制。如果 selinux是關閉的吧,這個命令執行是沒有問題的 mysql> select user from user into outfile '/home/test.txt'; Query OK, 2 rows affected (0.02 sec) 當時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使用者, 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 --> 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 shell>setsebool -P mysqld_disable_trans=1 開啟對mysql守護程序的許可權,這樣 mysql> select user from user into outfile '/home/test.txt'; 寫入到自定義的目錄就沒有問題了。 -P表示 是永久性設定,否則重啟之後又恢復預設值。 getsebool setsebool命令在root使用者下有許可權。 除了對selinux的許可權,當然首先要保證該目錄擁有讀寫許可權。 在ubuntu下 ,可以對AppArmor(/etc/apparmor.d/usr.sbin.mysqld) 修改,類似selinux。 新增/etc/squid/lists/eighties.txt w,類似。

相關推薦

解決select ... into outfile '..' mysql檔案許可權問題

select * from test into outfile '/home/user/test.txt' 在linux(centos)下 ,啟動了mysql 並給使用者檔案讀寫的權利 grant file on *.* to [email protected]

解決:CentOS下MySQL執行select ... into outfile ...: Can't create/write to file '...' (Errcode: 13)

原因:selinux阻止寫入操作 解決:vi /etc/selinux/config # This file controls the state of SELinux on the system.

mysql select into outfile報無許可權,訪問被拒絕

再使用into outfile的時候,報了下面的錯誤 ERROR 1045 (28000) at line 1: Access denied for user ‘ait_read’@’xx.xx.xx

MySQL select into outfile用法

SELECT INTO…OUTFILE語句把表資料匯出到一個文字檔案中,並用LOAD DATA …INFILE語句恢復資料。但是這種方法只能匯出或匯入資料的內容,不包括表的結構,如果表的結構檔案損壞,則必須先恢復原來的表的結構。     一、SELECT INTO…OUTF

翻譯:select into outfile(已提交到MariaDB官方手冊)

系列 targe mil utf 網站 https mariadb bsp color 本文為mariadb官方手冊:SELECT INTO OUTFILE的譯文。 原文:https://mariadb.com/kb/en/select-into-outfile/ 我

selectinto outfile 備份恢復(load data)以及mysqldump時間對比

IE sele 文本文 root 實現 default sin while con select … into outfile ‘path‘ 備份 此種方式恢復速度非常快,比insert的插入速度要快的多,他跟有備份功能豐富的mysqldump不同的是,他只能備份表中的數據

解決在 Win10沒有修改 hosts檔案許可權問題

當遇到有hosts檔案不能編輯或者修改了沒辦法儲存,以及需要許可權等問題: 1、win+R 2、進入hosts的檔案所在目錄,點選‘’檔案‘’按鈕 3、點選Windows PowerShell ,在點選以管理員身份開啟 4、彈出一個視窗,輸入

解決在Windows10沒有修改hosts檔案許可權

當遇到有hosts檔案不會編輯或者,修改了沒辦法儲存”,以及需要許可權等問題如圖: 我學了一招,先在交給你: 1、win+R 2、進入hosts的檔案所在目錄: 3、我們開始如何操作才能不出現許可權問題那? 3.1、點選‘’檔案‘’

Android的讀檔案許可權

/**測試沒通過 * 寫檔案 * @param str */ public void write(String str){ File file = new File(Environment.getExternalStorageDirectory()+"/

解決Mac下使用root 許可權依舊無法讀檔案的問題

當時在學習selenium的時候,需要配合使用chromedriver 和phantomjs 進行瀏覽器的自動化測試..  chromedriver下載結束後。無法移動到/user/bin下面 會提示許可權不夠,可明明是root,使用者,居然也許可權不夠??? 提示Operation not

MySQL不支援 SELECT INTO FROM 語句解決方法

今天備份mysql 資料表的時候,發現mysql 竟然不支援select *  into bk from user,執行sql 一直報錯 ,錯誤程式碼:1327 Undeclared variable  備份表名,查詢資料才發現 原來mysql 不支援 select into

MySQL SELECT xxx INTO OUTFILE用法

重啟數據庫 rmi sta off -s int select value sid 1、導出數據報錯 mysql> SELECT * INTO OUTFILE ‘/tmp/t.txt‘ FIELDS TERMINATED BY ‘,‘ OPTIONALLY ENCLO

sqlmap進行mysql注入root許可權檔案

  1.在BT5 R2下[email protected]:/sqlmap# python sqlmap.py -u http://www.wepost.com.hk/article.php?id=276 -f -b --current-user --curren

mysql load_file()和 into outfile

mysql服務器 init 數據導出 code httpd sel .com 12px host 0x00 load_file() 條件: 1. 要有file_priv權限 2. 知道文件絕對路徑 3. 能使用union 4. 對web目錄有讀權限 註:若過濾

linux下操作mysql、nginx,vim操作,檔案許可權設定等

inux下操作mysql、nginx,vim操作,檔案許可權設定等 #在Linux系統下,預設所有系統配置檔案都在/etc這個路徑下的 #Linux環境下安裝mysql資料庫 ##1、切換到root許可權下,採用yum命令安裝 同時安裝mariadb的客戶端和服務端

Linux 檔案和目錄的讀執行許可權詳解

首先了解一個ls -l 檔案的每列含義 [[email protected] ~]# ls -l a -rw-r–rw- 1 test002 tester 279103 9月 2 13:21 a 下面介紹每列含義: (1)第一列:檔案型別和許可權,這部分稍後重

開啟MySQL遠端訪問許可權允許遠端連線(解決Host is not allowed to connect to this MySQL server問題)

登陸mysql資料庫     [[email protected] data]# mysql -uroot -p123456 檢視user表 mysql> select host,user,password from user;

Java讀檔案,中文亂碼解決

讀檔案:使用new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));      StringBuffer strBuf = new StringBuffer(); BufferedRead

Mysql解決SELECT list is not in GROUP BY clause and contains nonaggregated column 問題

轉自:https://blog.csdn.net/u011676300/article/details/79564446 在使用GROUP BY對Mysql的資料表進行查詢時如果出現以下錯誤 select * from user group by age; ERROR 1055 (420

Linux系統下inode滿了導致無法檔案解決思路

解決思路1:刪除無用的臨時檔案,釋放inode   進入/tmp目錄,執行find -exec命令 find  /tmp  -type  f  -exec  rm  {}  \;   遍歷尋找0位元組的檔案,並