2012-11-20 38 views
2

好eveing所有,PHP的警告:MySQL錯誤3]寫文件時出錯「的/ tmp/

我有一個VPS運行CentOS 6的和正在運行雷米測試安裝PHP的(5.4.8)和MySQL (5.5.28)1cpu,2G內存,200G存儲。它用於使用Piwigo託管我的照片庫。根據PHPmyAdmin,該數據庫有1,385,133條記錄並佔用了60.8 MiB。我有完整的root權限,我一直在做一些SSH的工作,但它對我來說仍然是新手。

我一直看到這個錯誤,它似乎導致服務器的CPU使用率變高。似乎只是由網絡蜘蛛造成的,但它每天只發生幾次。

[warn] [client IP] mod_fcgid: stderr: PHP Warning: [mysql error 3] Error writing file '/tmp/MYq8M8yg' (Errcode: 28) 
[warn] [client IP] mod_fcgid: stderr: SELECT id 
[warn] [client IP] mod_fcgid: stderr: FROM piwigo_images i 
[warn] [client IP] mod_fcgid: stderr: INNER JOIN piwigo_image_category ic ON id=ic.image_id 
[warn] [client IP] mod_fcgid: stderr: INNER JOIN piwigo_image_tag it ON id=it.image_id 
[warn] [client] mod_fcgid: stderr: WHERE tag_id IN (6,18,54,55,445,714) 
[warn] [client IP] mod_fcgid: stderr: GROUP BY id 
[warn] [client IP] mod_fcgid: stderr: HAVING COUNT(DISTINCT tag_id)=6 
[warn] [client IP] mod_fcgid: stderr: ORDER BY file ASC, date_creation DESC in /var/www/vhosts/mydomain.com/subdomains/gallery/include/dblayer/functions_mysql.inc.php on line 770 
[client IP] mod_fcgid: stderr: PHP Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /var/www/vhosts/mydomain.com/subdomains/gallery/include/dblayer/functions_mysql.inc.php on line 200 

快速DF -h顯示,

Filesystem   Size Used Avail Use% Mounted on 
/dev/xvda1   4.0G 692M 3.3G 17%/
/dev/mapper/vg00-usr 4.0G 1.5G 2.4G 39% /usr 
/dev/mapper/vg00-var 148G 43G 98G 31% /var 
/dev/mapper/vg00-home 4.0G 136M 3.7G 4% /home 
none     1000M 112K 1000M 1% /tmp 

預先感謝您。

+0

夥計們,你們只需盲目地將它們遷移到服務器故障之前,就需要閱讀這些問題(***和答案***)。這超越了可笑。 – voretaq7

回答

0

錯誤代碼28表示「設備上沒有剩餘空間」。

有時MySQL會在多個步驟中處理複雜的查詢,同時將中間步驟的結果存儲在/ tmp目錄中。即使單個查詢沒有使用您擁有的所有空間,也可能在繁忙的服務器上同時運行多個查詢。

我認爲你有兩個選擇:

  1. 優化查詢,在一次處理的數據量。在發佈的查詢中,問題很可能是內部聯接,它創建了一個臨時結果集,其中包含圖像,類別和標籤的所有可能組合,遠遠超過上述1.3M記錄。

  2. 在此問題上拋出資源:給/ tmp留出更多空間或移動MySQL臨時目錄somewhere else

+0

理論上講,tmp由我尚未分配給驅動器的剩餘空間組成。所以它有1000M。但是現在我已經將它設置爲使用/ var/tmp,因爲它具有98G備用。唯一的問題是如何確保mysql具有使用該文件夾的正確權限? – Jack

+0

您可以創建一個/ var/tmp/mysql並讓用戶MySQL以自己的方式運行。 –