오후에 출근했는데 Dedecms 웹사이트에 문제가 있다는 말을 듣고 충격을 받았습니다. 방문했을 때 전체 화면 오류를 발견했는데 mysql 로그를 확인해보니
Table '. dedecmsv4dede_archives'는 충돌이 발생한 것으로 표시되어 복구해야 합니다.
cms라는 메시지가 표시됩니다. dede_archives 문서 테이블은 문제가 있는 것으로 표시되어 복구해야 합니다. 그래서 빠르게 과거 데이터를 복원하고 온라인에 접속해 원인을 알아봤습니다. 문제는 결국 해결될 것입니다. 해결 방법은 다음과 같습니다.
mysql 설치 디렉터리에서 bin/myisamchk 도구를 찾아 명령줄에 다음을 입력합니다.
myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI
그러면 myisamchk 도구가 인덱스를 복원하는 데 도움이 됩니다. 데이터 테이블의 mysql을 다시 시작하면 문제가 해결됩니다.
문제 분석:
1. 오류 원인 일부 네티즌들은 dede_archives 테이블을 자주 쿼리하고 업데이트하여 발생한 인덱스 오류라고 말했습니다. 내 페이지가 정적으로 생성되지 않고 동적 페이지이기 때문에 이 말에 전적으로 동의합니다. . 또한 어떤 이유로 인해 MYSQL 데이터베이스가 손상되었다고 합니다. 예를 들어, 데이터베이스 서버의 갑작스런 정전, 데이터베이스 테이블에 서비스를 제공할 때 테이블의 원본 파일에 대한 일부 작업으로 인해 MYSQL 데이터베이스가 작동하지 않을 수 있습니다. 손상되었습니다. 테이블이 손상되어 데이터를 읽을 수 없습니다. 간단히 말해서, 알 수 없는 문제로 인해 시계가 손상된 것입니다.
문제 번호는 145 입니다
. 2. 문제 해결 방법.
손상된 테이블 문제를 복구하려고 할 때 세 가지 유형의 복구가 있습니다. 임시 파일을 생성할 수 없다는 오류 메시지가 나타나면 메시지에 표시된 파일을 삭제하고 다시 시도하십시오. 이는 일반적으로 이전 복구 작업에서 보류된 것입니다.
세 가지 수정 사항은 다음과 같습니다.
% myisamchk --recover --quick /path/to/tblName
% myisamchk --recover /path/to/tblName
% myisamchk --safe-recover /path/to/tblName
첫 번째 방법은 가장 빠르며 가장 일반적인 문제를 해결하는 데 사용됩니다. 마지막 방법은 가장 느리고 다른 방법으로 해결할 수 없는 문제를 해결하는 데 사용됩니다.
MySQL 데이터 파일 확인 및 복구 위의 방법으로 손상된 테이블을 복구할 수 없는 경우 포기하기 전에 다음 두 가지 팁을 시도해 볼 수도 있습니다.
테이블의 인덱스 파일(*.MYI)에 복구할 수 없는 오류가 발생한 것으로 의심되거나 파일이 유실된 경우에도 데이터 파일(*.MYD)과 데이터 형식 파일(*.frm)을 이용하면 됩니다. 그것을 재생성하십시오. 먼저 데이터 파일(tblName.MYD)의 복사본을 만듭니다. MySQL 서비스를 다시 시작하고 연결하려면 다음 명령을 사용하여 테이블의 내용을 삭제하세요.
mysql> tblName에서 삭제;
테이블의 내용을 삭제하는 동안 새로운 인덱스 파일이 생성됩니다. 로그아웃하고 서비스를 다시 닫은 후 새(비어 있는) 데이터 파일을 방금 저장한 데이터 파일(tblName.MYD)로 덮어씁니다. 마지막으로 myisamchk를 사용하여 표준 복구(위의 두 번째 방법)를 수행하여 테이블 데이터와 테이블 형식 파일의 내용을 기반으로 인덱스 데이터를 재생성합니다.
테이블의 형식 파일(tblName.frm)이 없거나 복구할 수 없는 오류가 있지만 해당 CREATE TABLE 문을 사용하여 테이블을 재생성하는 방법을 알고 있는 경우 새 .frm 파일을 재생성하고 이를 데이터 파일과 함께 사용할 수 있습니다. 및 인덱스 파일(인덱스 파일에 문제가 있는 경우 위의 방법을 사용하여 새 파일을 다시 빌드하십시오.) 먼저 데이터 및 인덱스 파일의 복사본을 만든 다음 원본 파일을 삭제합니다(데이터 디렉터리에서 이 테이블과 관련된 모든 레코드 삭제).
MySQL 서비스를 시작하고 원본 CREATE TABLE 파일을 사용하여 새 테이블을 만듭니다. 새 .frm 파일은 제대로 작동하지만 표준 복구(위의 두 번째 방법)를 수행하는 것이 가장 좋습니다.
3. myisamchk 도구 소개(mysql의 공식 매뉴얼 참조)
myisamchk 유틸리티를 사용하여 데이터베이스 테이블에 대한 정보를 얻거나 테이블을 확인, 복구 및 최적화할 수 있습니다. myisamchk는 MyISAM 테이블(.MYI 및 .MYD 파일에 해당하는 테이블)에 적용됩니다.
myisamchk를 호출하는 방법:
shell> myisamchk [options] tbl_name ...
옵션은 myisamchk가 수행하려는 작업을 지정합니다. 이에 대해서는 나중에 설명합니다. myisamchk --help를 호출하여 옵션 목록을 얻을 수도 있습니다.
tbl_name은 확인하거나 복구하려는 데이터베이스 테이블입니다. 데이터베이스 디렉토리 어딘가에서 myisamchk를 실행하지 않는 경우, myisamchk는 데이터베이스가 어디에 있는지 모르기 때문에 데이터베이스 디렉토리에 대한 경로를 지정해야 합니다. 실제로 myisamchk는 작업 중인 파일이 데이터베이스 디렉터리에 있는지 여부에 상관하지 않습니다. 데이터베이스 테이블에 해당하는 파일을 다른 곳에 복사하고 그곳에서 복원 작업을 수행할 수 있습니다.
원한다면 myisamchk 명령줄을 사용하여 여러 테이블의 이름을 지정할 수 있습니다. 인덱스 파일의 이름을 지정하여(".MYI" 접미사 포함) 테이블을 지정할 수도 있습니다. "*.MYI" 스키마를 사용하여 디렉터리의 모든 테이블을 지정할 수 있습니다. 예를 들어, 데이터베이스 디렉토리에 있는 경우 다음과 같이 디렉토리에 있는 모든 MyISAM 테이블을 확인할 수 있습니다:
shell> myisamchk *.MYI
데이터베이스 디렉토리에 있지 않은 경우 디렉토리 경로를 지정하여 거기에 있는 모든 테이블을 확인할 수 있습니다:
shell> myisamchk /path/to/database_dir/*.MYI
MySQL 데이터 디렉토리 경로에 와일드카드를 지정하여 모든 데이터베이스의 모든 테이블을 확인할 수도 있습니다:
shell> myisamchk /path/to/datadir/*/*.MYI
모든 MyISAM 테이블을 빠르게 확인하는 권장 방법은 다음과 같습니다:
shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI
모든 MyISAM 테이블을 확인하고 손상된 테이블을 복구하려면 다음 명령을 사용할 수 있습니다:
shell> myisamchk --silent --force --fast --update-state
-O 키_버퍼=64M -O 정렬_버퍼=64M
-O 읽기_버퍼=1M -O 쓰기_버퍼=1M
/경로/to/datadir/*/*.MYI
이 명령은 64MB 이상의 여유 메모리가 있다고 가정합니다. myisamchk를 사용하여 메모리를 할당하는 방법에 대한 자세한 내용은 섹션 5.9.5.5, “myisamchk 메모리 사용량”을 참조하세요.
myisamchk를 실행할 때, 다른 프로그램이 테이블을 사용하고 있지 않은지 확인해야 합니다. 그렇지 않으면 myisamchk를 실행할 때 다음과 같은 오류 메시지가 표시됩니다:
경고: 클라이언트가 테이블을 제대로 사용 중이거나 닫지 않았습니다.
이는 파일을 닫지 않았거나 파일을 제대로 닫지 않은 채 종료된 다른 프로그램(예: mysqld 서버)에 의해 업데이트 중인 테이블을 확인하려고 함을 나타냅니다.
mysqld가 실행 중이면 FLUSH TABLES를 통해 메모리에 남아 있는 모든 테이블 수정 사항을 강제로 플러시해야 합니다. myisamchk를 실행할 때, 다른 프로그램이 테이블을 사용하고 있지 않은지 확인해야 합니다. 문제를 피하는 가장 쉬운 방법은 myisamchk 대신 CHECK TABLE을 사용하여 테이블을 확인하는 것입니다.