2012-11-20 3 views
2

좋은 eveing ​​모든PHP 경고 : MySQL의 오류 3] 파일 쓰기 오류 '/ tmp를/

나는 VPS는 CentOS는 6 실행하고 PHP의 (5.4.8)을 설치 레미 테스트를 실행와 MySQL되고있다 (5.5.28) 1cpu, 2G RAM, 200G 스토리지. Piwigo를 사용하여 사진 갤러리를 호스팅했습니다. 데이터베이스는 1,385,133 개의 레코드를 가지고 있으며 PHPmyAdmin에 따라 60.8 MiB를 차지합니다. 나는 완전한 루트 접근권을 가지고 있으며, SSH에서 몇 가지 일을 해왔지만 아직도 나에게 새로운 것이 전부다.

이 오류가 계속 표시되면 서버의 CPU 사용량이 높아지는 것으로 보입니다. 웹 스파이더에 의해서만 발생하지만 하루에 수 차례 발생합니다.

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 

[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 쇼, 사전에 감사합니다.

+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을 소유하게 할 수 있습니다. –