Linux下MySQL的寫檔案時許可權錯誤(Errcode: 13)解決方案

來源:互聯網
上載者:User

標籤:mysql

在資料庫中select * into outfile ‘/home/mysql/data.sql‘,mysql又提示錯誤:

  1. 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 


以下為網友的分享:

=========================================================================


用select * into outfile ‘/home/mysql/data.sql‘,mysql又提示錯誤:

  1. ERROR 1 (HY000): Can‘t create/write to file ‘/home/mysql/data.sql‘ (Errcode: 13)  

看錯誤代號,應該還是許可權的問題。之前也遇到過類似錯誤,如果匯出到/tmp目錄下是沒問題的。可是通過“ls -l”命令,證實/home/mysql已經全部改成mysql使用者了,而且也具有讀寫的許可權,為什麼仍是不能操作呢?

在絕望之餘,終於在網上找到最終解決方案:

  1. # setsebool -P mysqld_disable_trans=1  

執行上述命令後,重啟mysql服務,日誌終於產生了。select * into outfile也正常執行了,大功告成!!!


以下摘錄了網頁中的詳細介紹,具體網址不記得了。

  1. 在red hat系列的linux中selinux對哪些daemon可以進行怎麼樣的操作是有限制的,mysql的select into outfile的命令是mysql的daemon來負責寫檔案操作的。寫檔案之前當然要具有寫檔案的許可權。而selinux對這個許可權做了限制。如果selinux是關閉的吧,這個命令執行是沒有問題的  

  2. mysql> select user from user into outfile ‘/home/test.txt‘;  

  3. Query OK, 2 rows affected (0.02 sec)  

  4. 當時selinux開啟時  

  5. selinux對mysql的守護進程mysqld進行了限制。  

  6. mysql> select user from user into outfile ‘/home/test.txt‘;  

  7. ERROR 1 (HY000): Can‘t create/write to file ‘/home/test.txt‘ (Errcode: 13)   

  8. 出現了沒有許可權寫的error。  

  9. 解決方案,可以關閉selinux。  

  10. 可以在/etc/selinux中找到config  

  11. root使用者,  

  12. shell>vi /etc/selinux/config  

  13.   

  14. # This file controls the state of SELinux on the system.  

  15. # SELINUX= can take one of these three values:  

  16. # enforcing - SELinux security policy is enforced.  

  17. # permissive - SELinux prints warnings instead of enforcing.  

  18. # disabled - SELinux is fully disabled.  

  19. SELINUX=enforcing  

  20.   

  21. 修改SELINUX=disabled關閉selinux就可以了,這個問題就可以解決了。  

  22. 不過全部關閉SELINUX有帶來一些安全問題。  

  23. 當然也可以,單獨給mysql的守護進程許可權,  

  24. shell>getsebool -a可以查看當前的對系統一系列守護進程的許可權情況。  

  25.   

  26. lpd_disable_trans --> off  

  27. mail_read_content --> off  

  28. mailman_mail_disable_trans --> off  

  29. mdadm_disable_trans --> off  

  30. mozilla_read_content --> off  

  31. mysqld_disable_trans --> off  

  32. nagios_disable_trans --> off  

  33. named_disable_trans --> off  

  34. named_write_master_zones --> off  

  35. nfs_export_all_ro --> on  

  36. nfs_export_all_rw --> on  

  37. nfsd_disable_trans --> off  

  38. nmbd_disable_trans --> off  

  39. nrpe_disable_trans --> off  

  40.   

  41. shell>setsebool -P mysqld_disable_trans=1  

  42. 開啟對mysql守護進程的許可權,這樣  

  43. mysql> select user from user into outfile ‘/home/test.txt‘;  

  44. 寫入到自訂的目錄就沒有問題了。  

  45. -P表示 是永久性設定,否則重啟之後又恢複預設值。  

  46. getsebool setsebool命令在root使用者下有許可權。  

  47.   

  48. 除了對selinux的許可權,當然首先要保證該目錄擁有讀寫權限。  

  49.   

  50.   

  51. 在Ubuntu下 ,可以對AppArmor(/etc/apparmor.d/usr.sbin.mysqld) 修改,類似selinux。  

  52. 添加/etc/squid/lists/eighties.txt w,類似。  



  1. 關閉mysql: service mysqld stop

  2. 複製檔案:cp -R /vqr/lib/mysql /xvdb1/

  3. 重新命名目錄: mv /var/lib/mysql /var/lib/mysql-backup

  4. 連結檔案: ln -s /xvdb1/mysql /var/lib/mysql

  5. 修改目錄許可權:

  • chown mysql:mysql /xvdb1/mysql -R

  • chown -h mysql:mysql /var/lib/mysql

修改selinux的content type
  • chcon -R -t mysqld_db_t /xvdb1/mysql

  • chcon -h mysqld_db_t /var/lib/mysql

重新啟動mysql: service mysqld start

在linux中用ln -s 建立連結時,如上面的 ln -s /xvdb1/mysql /var/lib/mysql,對每個連結,同時關聯兩個對象,即連結本身以及連結所指向的檔案。如/var/lib/mysql,本身是一個連結,同時指向一個實際的目錄 /xvdb1/mysql。當在連結上使用chown或chcon時,預設修改的是連結指向的對象,即/xvdb1/mysql,而不是連結本身。為了修改連結本身的owner或context type,需要加上 -h 參數。因此上面chown和chcon都用了兩遍。

附上錯誤資訊:

110824  6:55:11 [Warning] Can’t create test file /var/lib/mysql/testemp.lower-test
110824  6:55:11 [Warning] Can’t create test file /var/lib/mysql/testemp.lower-test
/usr/libexec/mysqld: Can’t change dir to ‘/var/lib/mysql/’ (Errcode: 13)


Linux下MySQL的寫檔案時許可權錯誤(Errcode: 13)解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.