15.2.4.2 제대로 닫혀지지 않았던 테이블의 문제
각 MyISAM
인덱스 파일 ( .MYI
파일)에는 테이블이 제대로 닫혔는지 여부를 확인하는 데 사용할 수있는 카운터가 헤더에 있습니다. CHECK TABLE
또는 myisamchk에서 다음과 같은 경고가 표시되는 경우이 카운터가 동기화 않았 음을 보여줍니다.
clients are using or have not closed the table properly
이 경고는 반드시 테이블이 파손 된 것을 의미하는 것은 아니지만 적어도 테이블을 확인하는 것이 좋습니다.
카운터는 다음과 같이 작동합니다.
MySQL에서 테이블이 먼저 업데이트 될 때 인덱스 파일의 헤더에있는 카운터가 증가합니다.
이후 업데이트에서는 카운터는 변경되지 않습니다.
테이블의 마지막 인스턴스가 닫힐 때 (
FLUSH TABLES
작업이 수행 되었기 때문에, 또는 테이블 캐시에 장소가 없기 때문에), 지금까지 테이블이 업데이트되어, 카운터 값이 감소합니다.테이블을 복구하거나 체크하고 문제가 없었던 경우는 카운터가 0으로 재설정됩니다.
테이블을 검사 할 수있는 다른 프로세스와의 상호 작용의 문제를 해결하기 위해 카운터가 0이면 테이블을 닫을 때 카운터 값은 줄어들지 않습니다.
즉, 카운터가 정확하지 않을 수있는 것은 다음과 같은 경우뿐입니다.
MyISAM
테이블의 복사본을 먼저LOCK TABLES
과FLUSH TABLES
을 발행하지 열린다.MySQL이 업데이트 된 후 닫힐 때까지의 사이에 충돌했다. (단, MySQL은 각 문에서 발생한 모든 기록을 항상 게시 할 테이블에 문제가 없을 수도 있습니다).
mysqld와 함께 사용되는 myisamchk --recover 또는 myisamchk --update-state 의해 테이블이 수정되었다.
다른 서버에서 사용되는 동안 여러 mysqld 서버가 테이블을 사용하여 하나의 서버가
REPAIR TABLE
또는CHECK TABLE
테이블에서 실행했다. 이 설정은 다른 서버에서 경고를받을 수 있습니다 만,CHECK TABLE
의 사용이 안전합니다. 그러나 서버가 데이터 파일을 새로운 파일로 대체 한 경우 다른 서버에 알리지 않아REPAIR TABLE
은 피해야한다.일반적으로 여러 서버간에 데이터 디렉토리를 공유하는 것은 권장되지 않습니다. 자세한 내용은 5.3 절 "하나의 시스템에서 여러 MySQL 인스턴스 실행" 을 참조하십시오.