MySQL / 쓰기 파일 오류 (Errcode 28)


82

웹 응용 프로그램 중 하나에 다음 오류가 있습니다.

Query3 failed: Error writing file '/tmp/MY1fnqpm' (Errcode: 28) ... INSERT MailList... (removed the rest of the query for security reasons)

어떤 아이디어라도-이것은 내 서버의 하드 디스크 공간 문제입니까?


3
사용 가능한 디스크 공간이 충분합니까?
NDM 2011 년

4
기기의 여유 공간을 확보하세요.
Ashwin A 2011 년

1
오늘 11 % 만 사용 된 기기에서이 오류가 표시되었습니다. 컴퓨터를 재부팅했는데 그 후에도 괜찮 았지만 여유 공간이 있어도이 오류가 발생할 수있는 것 같습니다.
Elkvis 2014 년

위에서 언급했듯이 오류 코드 28은 디스크 공간이 부족함을 의미합니다. 클라이언트가 아닌 서버 오류 메시지입니다. 따라서 올바른 서버를 확인하고 있는지 확인하십시오.
세르게이 Sinkovskiy

답변:


117

다음 perror명령을 사용하십시오 .

$ perror 28
OS error code  28:  No space left on device

시스템의 오류 코드가 다르지 않으면 파일 시스템이 가득 찼습니다.


7
"파일 시스템이 가득 찼습니다". 어느 쪽? db 서버 또는 db 클라이언트?
Marinos An

db_server에 있습니다. 당신이 사용할 수있는 while true; do df -h /tmp; sleep 3; done스크립트를 실행하는 동안 임시 테이블에서 사용하는 공간의 양을 확인할 수 있습니다.
vinicius.olifer

20

우리는 비슷한 문제를 겪었고 문제는 MySQL이 필요에 따라 / tmp 디렉토리를 사용했다는 것입니다 (기본 구성). 그리고 / tmp는 큰 MySQL 요청을위한 공간이 너무 적은 자체 파티션에 있습니다.

자세한 내용은 https://stackoverflow.com/a/3716778/994302에서 답변을 찾아보십시오.


17

같은 문제가 있었지만 디스크 공간은 괜찮 았습니다 (40 % 만 찼습니다). 문제는 inode 였고, 너무 많은 작은 파일이 있었고 내 inode가 가득 찼습니다.

df -i로 inode 상태를 확인할 수 있습니다.


10

이 오류는 MySQL에 필요한 임시 파일을 만들 공간이 충분하지 않음을 의미합니다.

가장 먼저 시도 할 수있는 것은 /tmp/파티션 의 크기를 확장하는 것 입니다. LVM 아래에있는 경우 lvextend명령을 확인하십시오 .

파티션 크기를 늘릴 수없는 경우 /tmp/MySQL 구성에서 작업 할 수 있습니다 .my.cnf (일반적으로 /etc/mysql/my.cnf) 파일을 편집하고 다음 줄을 찾으십시오.

tmpdir = /tmp/

원하는대로 변경하십시오 (예 /var/tmp/). 공간이 있는지 확인하고 새 디렉토리에서 mysql 사용자에게 쓰기 권한을 할당하십시오.

도움이 되었기를 바랍니다!


4

다음 코드를 실행하십시오.

du -sh / var / log / mysql

아마도 mysql 바이너리 로그가 메모리를 채웠을 것입니다. 그렇다면 이전 로그를 제거하고 서버를 다시 시작하십시오. 또한 my.cnf를 추가하십시오.

expire_logs_days = 3


du :`/ var / log / mysql '에 액세스 할 수 없음 : 해당 파일 또는 디렉토리 없음
User

해야du -sh /var/log/mysql.log
니키타 웃에게

1

나는 이와 동일한 오류가 있었고 문제는 단순히 내 가상 머신의 공간이 충분하지 않았습니다. 불필요한 파일을 삭제하고 다시 작동하기 시작했습니다.

내 메모리 / 디스크 공간 할당은 다음과 같습니다.

df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   37G   37G  127M 100% /
...

0

다른 방법이 작동하지 않으면이 줄을 사용해 볼 수도 있습니다.

du -sh / var / lib / mysql / database_Name

호스트에 문의하여 데이터베이스가 허용하는 크기를 확인할 수도 있습니다.


0

xampp 사용자의 경우 : 내 경험상 '0'이라는 이름의 파일이 'mysql'폴더에있는 문제가 발생했습니다. 크기는 너무 컸습니다 (광산은 약 256Gb로 폭발했습니다). 제거하면 문제가 해결되었습니다.


0

이 오류는 파티션에 충분한 공간이 없을 때 발생합니다. 일반적으로 MYSQL은 Linux 서버에서 / tmp를 사용합니다. 조회가 많은 데이터를 반환하거나 큰 임시 파일을 생성하는 많은 데이터를 선별하기 때문에 일부 쿼리에서 이러한 현상이 발생할 수 있습니다.

/etc/mysql/my.cnf 편집

tmpdir = / your / new / dir

예 :

tmpdir = / var / tmp

일반적으로 자체 파티션에있는 / tmp보다 더 많은 공간을 할당해야합니다.


0

오늘. 나는 같은 문제가 ... 내 해결책 :

1) inode 확인 : df -i 나는 보았다 :

root@vm22433:/etc/mysql# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 124696 304 124392 1% /dev
tmpfs 127514 452 127062 1% /run
/dev/vda1 1969920 1969920 0 100% /
tmpfs 127514 1 127513 1% /dev/shm
tmpfs 127514 3 127511 1% /run/lock
tmpfs 127514 15 127499 1% /sys/fs/cgroup
tmpfs 127514 12 127502 1% /run/user/1002

2) 최대 inod 수를 사용하는 폴더를 찾기 시작했습니다.

 for i in /*; do echo $i; find $i |wc -l; done

곧 나는 엄청난 수의 파일을 포함하는 / home / tomnolane / tmp 폴더에서 발견했습니다.

3) / home / tomnolane / tmp 폴더 PROFIT을 제거했습니다.

4) 확인 :

Filesystem      Inodes  IUsed   IFree IUse% Mounted on
udev            124696    304  124392    1% /dev
tmpfs           127514    454  127060    1% /run
/dev/vda1      1969920 450857 1519063   23% /
tmpfs           127514      1  127513    1% /dev/shm
tmpfs           127514      3  127511    1% /run/lock
tmpfs           127514     15  127499    1% /sys/fs/cgroup
tmpfs           127514     12  127502    1% /run/user/1002

괜찮아.

5) restart mysql service-괜찮아 !!!!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.