Programing

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

crosscheck 2020. 10. 12. 07:16
반응형

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


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

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

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


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

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

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


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

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


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

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


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

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

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

tmpdir = /tmp/

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

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


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

du -sh / var / log / mysql

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

expire_logs_days = 3


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

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

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

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

du -sh / var / lib / mysql / database_Name

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


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


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

/etc/mysql/my.cnf 편집

tmpdir = / your / new / dir

예 :

tmpdir = / var / tmp

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


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

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-괜찮아 !!!!

참고URL : https://stackoverflow.com/questions/7415710/mysql-writing-file-error-errcode-28

반응형