萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql錯誤:ERROR 29 (HY000): File xxx.txt not found (Errcode: 13)

mysql錯誤:ERROR 29 (HY000): File xxx.txt not found (Errcode: 13)

有朋友使用mysql時可能會碰到mysql錯誤:ERROR 29 (HY000): File \'xxx.txt\' not found (Errcode: 13)提示,下面我來給大家介紹解決辦法。

突然遇到mysql錯誤:ERROR 29 (HY000): File '/var/www/xiaoyou/static/upload/import/20130427105733.csv.txt' not found (Errcode: 13)

感覺特奇怪,因為程序在本地很ok,生氣了語句如下:

LOAD DATA INFILE '/var/www/upload/abc.csv.txt' INTO TABLE alumni_import FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED by ' ' IGNORE 1 lines (field1,field2,...);

我一直因為是權限,問題,但是當我把目錄和文件權限都chmod為777後還是出錯,google了後發現:


Recent Ubuntu Server Editions (such as 10.04) ship with AppArmor and MySQL's profile might be in enforcing mode by default. You can check this by executing
sudo aa-status
 like so:


# sudo aa-status 5 profiles are loaded.5 profiles are in enforce mode./usr/lib/connman/scripts/dhclient-script /sbin/dhclient3 /usr/sbin/tcpdump /usr/lib/NetworkManager/nm-dhcp-client.action /usr/sbin/mysqld 0 profiles are in complain mode.1 processes have profiles defined.1 processes are in enforce mode :/usr/sbin/mysqld (1089)0 processes are in complain mode.

If mysqld is included in enforce mode, then it is the one probably denying the write. Entries would also be written in
/var/log/messages
 when AppArmor blocks the writes/accesses. What you can do is edit
/etc/apparmor.d/usr.sbin.mysqld
 and add
/data/
 and
/data/*
 near the bottom like so:

...
/usr/sbin/mysqld {
    ...
    /var/log/mysql/ r,
    /var/log/mysql/* rw,
    /var/run/mysqld/mysqld.pid w,
    /var/run/mysqld/mysqld.sock w,
    /data/ r,
    /data/* rw,
}

And then make AppArmor reload the profiles.


# sudo /etc/init.d/apparmor reload


大體內容就是,mysqld強制編碼了,文件沒有寫入權限,於是我把該文件目錄也加到mysqld(/etc/apparmor.d/usr.sbin.mysqld這個文件的底部,如上粗體部分):


/var/www/upload/import/ r,


/var/www/upload/import/* rw,

copyright © 萬盛學電腦網 all rights reserved