[mysql] MySQL : # 126-테이블에 대한 잘못된 키 파일

MySQL 쿼리에서 다음 오류가 발생했습니다.

#126 - Incorrect key file for table

이 테이블에 대한 키를 선언하지도 않았지만 인덱스가 있습니다. 누구든지 문제가 무엇인지 알고 있습니까?



답변

이런 일이 발생할 때마다 내 경험상 전체 디스크였습니다.

편집하다

램 디스크를 구성한 경우 큰 테이블을 변경하는 것과 같은 작업을 수행 할 때 전체 램 디스크가 원인 일 수 있다는 점도 주목할 가치가 있습니다. 크기를 늘릴 수없는 경우 이러한 작업을 허용하기 위해 ramdisk 행을 임시로 주석 처리 할 수 ​​있습니다.


답변

우선, 키와 인덱스가 MySQL에서 동의어라는 것을 알아야합니다. CREATE TABLE Syntax 에 대한 문서를 보면 다음을 읽을 수 있습니다.

KEY일반적으로 INDEX. 키 속성 PRIMARY KEYKEY열 정의에 지정된 경우와 같이 지정할 수도 있습니다 . 이것은 다른 데이터베이스 시스템과의 호환성을 위해 구현되었습니다.


이제 발생하는 오류의 종류는 다음 두 가지 때문일 수 있습니다.

  • MySQL 서버의 디스크 문제
  • 손상된 키 / 테이블

첫 번째 경우 쿼리에 제한을 추가하면 문제가 일시적으로 해결 될 수 있음을 알 수 있습니다. 그렇게하는 경우 tmp수행하려는 쿼리 크기에 비해 너무 작은 폴더가 있을 수 있습니다 . 그런 다음 결정하거나 tmp더 크게 만들거나 쿼리를 더 작게 만들 수 있습니다! 😉

때로는 tmp충분히 크지 만 여전히 가득 차면 이러한 상황에서 수동으로 정리해야합니다.

두 번째 경우에는 MySQL 데이터에 실제 문제가 있습니다. 데이터를 쉽게 다시 삽입 할 수 있다면 테이블을 삭제 / 다시 생성하고 데이터를 다시 삽입하는 것이 좋습니다. 할 수 없다면 REPAIR table을 사용하여 테이블을 제자리에서 복구 해 볼 수 있습니다 . 일반적으로 매우 긴 프로세스로 실패 할 수 있습니다.


다음과 같은 전체 오류 메시지 를 확인하십시오.

‘FILEPATH.MYI’테이블의 키 파일이 잘못되었습니다. 그것을 고치려고

수리를 시도 할 수 있음을 메시지에 언급합니다. 또한 얻은 실제 FILEPATH를 보면 더 많은 것을 찾을 수 있습니다.

  • 만약 그렇다면 /tmp/#sql_ab34_23fMySQL은 쿼리 크기 때문에 임시 테이블을 만들어야한다는 뜻입니다. / tmp에 저장하고 / tmp에 해당 임시 테이블을위한 공간이 충분하지 않습니다.

  • 대신 실제 테이블의 이름이 포함 된 경우이 테이블이 손상되었을 가능성이 매우 높으므로이를 복구해야합니다.


문제가 / tmp 크기와 관련이 있음을 확인하는 경우 수정에 대한 유사한 질문에 대한이 답변을 읽으십시오. MySQL, 오류 126 : 테이블에 대한 잘못된 키 파일 .


답변

이 지침에 따라 tmp 디렉토리를 다시 만들고 문제를 해결할 수있었습니다.

모든 파일 시스템 및 해당 디스크 사용량을 사람이 읽을 수있는 형식으로 표시합니다.

df -h

파일이 열려있는 프로세스 찾기 /tmp

sudo lsof /tmp/**/*

그런 다음 umount /tmp/var/tmp:

umount -l /tmp
umount -l /var/tmp

그런 다음 손상된 파티션 파일을 제거하십시오.

rm -fv /usr/tmpDSK

그런 다음 멋진 새 것을 만듭니다.

/scripts/securetmp

securetmp Perl 스크립트를 편집하여 직접 tmp 디렉토리의 크기를 수동으로 설정할 수 있지만 스크립트를 실행하면 서버의 tmp 디렉토리 크기가 약 450MB에서 4.0GB로 증가했습니다.


답변

오류 # 126은 일반적으로 손상된 테이블이있을 때 발생합니다. 이를 해결하는 가장 좋은 방법은 수리를 수행하는 것입니다. 이 기사가 도움이 될 수 있습니다.

http://dev.mysql.com/doc/refman/5.0/en/repair-table.html


답변

전체 텍스트 인덱스의 최소 단어 길이를 기본값 4에서 2로 낮추는 ft_min_word_len = 2에서 설정하면이 오류가 발생 my.cnf합니다.

테이블을 수리하면 문제가 해결되었습니다.


답변

쿼리에서 제한을 사용하십시오. @Monsters X가 말한 것처럼 전체 디스크 때문입니다.

나는 또한이 문제에 직면하고 수천 개의 레코드가 있었기 때문에 쿼리 제한으로 해결했습니다. 이제 잘 작동합니다. 🙂


답변

나는 이것이 오래된 주제라는 것을 알고 있지만 언급 된 해결책 중 어느 것도 나를 위해 일하지 않았습니다. 나는 다른 일을했습니다.

다음을 수행해야합니다.

  1. MySQL 서비스를 중지합니다.
  2. mysql \ data 열기
  3. ib_logfile0 및 ib_logfile1을 모두 제거하십시오.
  4. 서비스 다시 시작