2010-02-15 70 views
5

我的SELECT ... INTO OUTFILE聲明遇到了一些權限問題。在MySQL中創建/寫入權限

當我登錄到我的數據庫,並做了簡單的導出命令,例如:

mysql> select * from XYZ into outfile '/home/mropa/Photos/Desktop/TEST.txt'; 

我得到的迴應:

ERROR 1 (HY000): 
Can't create/write to file '/home/mropa/Photos/Desktop/TEST.txt' 
(Errcode: 13) 

然而,當我簡單的寫:

mysql> select * from XYZ into outfile 'TEST.txt'; 
Query OK, 8287 rows affected (0.73 sec) 

該文件被寫入目錄/var/lib/mysql/XYZ。 我查看了文件/etc/apparmor.d/usr.sbin.mysqld,其中mysql似乎定義了讀寫權限,但我不知道如何修改它。

我該如何給予我自己的權限,將mysql表導出到我喜歡的任何目錄中?

回答

4

問題是目錄權限。 mysqld不會以current_user身份運行。將mysqld用戶添加到對目標目錄具有寫權限的組中(方便但不安全),或者記住在編寫outfile之前和之後更改目標目錄許可權。

+0

@dnagirl我通常使用命令「mysql -u mropa -p」啓動mysql,因此用戶是'mropa',它應該具有寫權限。你能否詳細闡述你的答案,我不完全理解它。謝謝。 – mropa 2010-02-15 21:08:46

+1

@mropa:當你執行'mysql -u mropa -p'時,你並沒有啓動mysqld進程。你只是登錄到它。當您寫入outfile時,它不是您正在編寫的登錄用戶,而是mysqld進程。假設你以mropa的身份登錄到shell,然後以mydb_user的身份登錄到mysql。當你從mysql寫入outfile時,mropa和mydb_user都不會去做這件事。作者是mysqld進程的所有者。 – dnagirl 2010-02-15 21:16:35

+0

很有幫助,謝謝! – mropa 2010-02-15 21:25:56

1

這聽起來像你沒有訪問該特定的文件夾。 您應該將mysql添加到該特定位置的組所有者。

我不知道下什麼用戶,您但是下運行MySQL,

CHOWN的mysql:MySQL中的/ home/mropa /照片/桌面/日誌意味着mysql用戶和mysql組是所有者所以有權限。然後你需要確保權限包括書寫,但這應該足夠了。

Chown Command

2

您可以創建一個目錄,通過運行mysqld的(通常是「MySQL的」)的用戶可寫,寫文件存在。對於intance:

chmod a+w /home/mropa/mysql 
1

的信息,請參閱https://wiki.ubuntu.com/DebuggingApparmor調試/禁用AppArmor配置文件。

它可能不是一個apparmor問題,特別是。 mysqld正在運行的用戶可能沒有權限寫入您指定的文件夾。檢查目標目錄/文件的權限。

0

mysql通常在用戶mysqld下運行。權限可以通過apparmor直接解決。請參閱this answer