Mysql load data 命令解析、處理 error 29 (ErrCode: 13) 錯誤(在ubuntu環境下),errcodeubuntu

來源:互聯網
上載者:User

Mysql load data 命令解析、處理 error 29 (ErrCode: 13) 錯誤(在ubuntu環境下),errcodeubuntu

在 mysql 伺服器上,可以通過命令:

load data infile 'file_name' into table table_name; 

將一個文字檔中的所有資料存到指定表中。最粗略形式的例子:

load data infile 'test.txt' into table test_table;

預設情況下,load data infile 對於文本中行為是:

比如某一行文本:
1 test “xx”
讀入資料庫之後,第三個欄位的值是 “xx”,而不是 xx。當然這些欄位都可以設定,完整的 load data infile 命令是:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'   [REPLACE | IGNORE]  INTO TABLE tbl_name   [FIELDS    [TERMINATED BY 'string']   [[OPTIONALLY] ENCLOSED BY 'char']   [ESCAPED BY 'char' ] ]   [LINES   [STARTING BY 'string']  [TERMINATED BY 'string']  ]   [IGNORE number LINES]  [(col_name_or_user_var,...)]   [SET col_name = expr,...]]

ignore 和 replace 用於區別當讀入文本和原有表格中主鍵衝突的記錄時候的處理方式。
fields 之後的 terminated by 設定欄位終結符(分隔字元),enclosed by 設定外括字元,escape by 設定逸出字元(這一點不是很確定)。
lines 之後的 starting by 設定行首碼,讀入時候忽略掉, terminated by 設定分行符號。更多細節參考第一條連結。

然後在使用過程中,很容易出現錯誤:
ERROR 29 (HY000): File ‘test.txt’ not found (Errcode: 13)
網上有很多說在命令中加local關鍵字,可惜在我的電腦上。。。然並卵。。。在命令列下可以知道errcode 13指的是存取權限問題:

xyb@xyb-computer:~$ perror 13OS error code 13: Permission denied

就算改變了test.txt檔案的存取權限,例如 chmod o+r test.txt 依然會出現上述問題。要解決這個問題會扯到 AppArmor。這是一個保護機制,限制每個程式對特定目錄和檔案的存取權限。也即是說,當前 mysql 程式訪問這個檔案的許可權被 AppArmor 限制住了。關於 AppArmor 參考第二條連結(維基百科)。
真正可以做的是給mysql程式讀取這個檔案的許可權,按照以下幾個步驟可以做到:
1)開啟 /etc/apparmor.d/usr.sbin.mysqld 檔案
2)此時能看到很多關於mysql能夠讀寫為目錄和檔案的記錄,比如:

#Other contents/usr/sbin/mysqld {    #Other contents    /var/log/mysql.log rw,    /var/log/mysql.err rw,    #Other contents    #This will be your dir definition    /tmp/ r,    /tmp/* rw,    #Other contents}

在最後加上需要讀寫的檔案的相應許可權,儲存並退出。
3)重新匯入 AppArmor 配置,利用 /etc/init.d/apparmor reload 命令
4)重新啟動 mysql,利用 service mysql restart 命令
至此問題應該解決了。不過這可能是個不安全的解決辦法,需要謹慎。具體參考第三條連結。

參考連結:
http://www.2cto.com/database/201108/99655.html
https://en.wikipedia.org/wiki/AppArmor
https://oldwildissue.wordpress.com/2013/12/11/fixing-mysql-error-29-errcode-13-in-ubuntu/

相關文章

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.