사실 대부분의 테이블 손상이 일어나는 경우는 MariaDB-MYISAM의 조합이다.
(InnoDB의 경우 이 전 포스팅을 참고)
https://yenbook.tistory.com/108
MYISAM의 경우 하나의 테이블에 대해 기본적으로 3개의 파일을 생성한다.
/mysql/data/DB명/테이블명.frm | 테이블의 구조를 정의하는 파일 |
/mysql/data/DB명/테이블명.MYD | 데이터 파일 |
/mysql/data/DB명/테이블명.MYI | 인덱스 파일 |
myisamchk(데이터 파일의 상태를 체크하거나 손상된 데이터 파일을 복구하는 유틸리티)를 사용할 경우
check table과 repair table에 비해 빠른 속도로 복구가 가능하다.
myisamchk 유틸리티 옵션 리스트
구분 | 명령어 | 설명 |
Global 옵션 | -#, --debug=… | Debug 로그를 출력함 |
-?, --help | 도움말을 출력 | |
-s, --silent | 침묵 모드로 작동 검사도중 에러가 발생했을 때만 출력 |
|
-v, --verbose | 상세 정보를 출력 | |
체크 옵션 | -c, --check | 테이블에 오류가 없는지 체크 |
-e, --extend-check | 테이블에 오류가 없는지 세밀하게 검사 오류를 수정했음에도 계속해서 오류가 발생할 때 이 옵션을 부여한다. 대신 체크 속도는 느림 |
|
-F, --fast | 제대로 닫히지 않은 테이블만 체크 | |
-C, --check-only-changed | 마지막으로 체크한 이후로 변경된 테이블만 체크 | |
-f, --force | 체크 중 에러가 발견되면 바로 복구 시작 | |
-i, --information | 체크된 테이블의 정보를 출력 | |
-m, --medium-check | --extend-check 체크보다 빠르게 체크 | |
복구 옵션 | -B, --backup | .MYD 파일의 백업 파일을 ‘<파일명>-<생성시간>.BAK’라는 이름으로 생성 |
-D, --data-file-length=<크기> | 복구 후 다시 생성할 데이터 파일의 최대 크기를 지정 | |
-e, --extend-check | 로우 단위로 세밀하게 복구한다. 파일이 완전히 손상된 경우에만 이 옵션을 사용 |
|
-f, --force | 기존의 임시 파일을 덮어씀 | |
-r, --recover | 손상된 테이블을 복구 | |
-o, --safe-recover | 예전 버전의 복구 방법을 사용하여 복구 -r보다는 느리지만 -r옵션에서 복구할 수 없는 것들을 일부 복구함 |
|
-q, --quick | 데이터 파일(.MYD)를 제외하고 빠르게 복구 |
복구 방법 1~4까지 순서대로 실행해본다. 각 방법마다 에러 발생 시 아래의 방법으로 이동한다.
복구 방법 1
1)테이블 체크
myisamchk *.MYI를 실행하거나,
시간이 더 있다면 myisamchk -e *.MYI를 실행하여 어떤 테이블에 오류가 있는지 체크한다.
2)myisamchk -r -q <테이블명> 을 실행하여 빠른 복구를 실행
-q 옵션을 부여하여 데이터파일 (.MYD)은 건드리지 않고 인덱스 파일을 복구함
복구 방법 2
1)데이터 파일을 백업
2)myisamchk -r <테이블명> 을 실행하여 복구 모드로 복구를 실행한다.
오류가 있는 행을 삭제하면서 새로운 인덱스 파일을 생성한다.
3)복구되지 않을 시 myisamchk –safe-recover <테이블명> 을 실행한다.
복구 방법 3
1)데이터 파일(.MYD)를 다른 장소로 이동한다. (복사X)
2)mysql> 에 접속하여 해당 테이블을 삭제한다. TRUNCATE TABLE
3)이동시켜둔 데이터 파일을 원래 위치로 복사 (이동X)
4)myisamchk -r -q <테이블명> 실행하여 복구
.frm 파일이 심하게 손상되어 위 방법으로 복구되지 않을 시, 다음과 같이 시도한다.
복구 방법 4
1)새로운 데이터 베이스에서 새 테이블을 생성하여 .frm과 .MYI파일을 만든다.
2)복구 방법 2와 동일하게 진행
복구 방법 5
1)톰캣중지
2)아래 복구 방법을 하나씩 해본다!
-repair table 테이블명;
-repair table 테이블명 use_frm;
-myisamchk --recover 테이블명;
-mysqlcheck -u root -p --auto-repair DB명;
3)톰캣 재가동
복구 방법 6
1) stop the MySQL database - MYSQL 중지
2) take backup of your .frm, .myd, myi files - data폴더 안에 있는 .frm, .myd, .myi 파일 백업
3) delete all the files from mysql data directory. - data 폴더 안에 있는 해당 테이블과 관련된 파일 모두 삭제
4) start MySQL Database - MYSQL 서비스 시작해서 테이블이 사라졌는지 확인
5) Re-create table again by using CREATE Table statement. - CREATE문을 사용하여 해당 테이블 재생성
6) Stop the MySQL database. - MYSQL 중지
7) Copy .myd & .myi files back into the data directory by replacing the ones there. - myd, .myi 파일을 data폴더에 덮어쓰기
8) At last, begin MySQL database again. - MYSQL 재시작
'DATABASE' 카테고리의 다른 글
MYSQL 파일 단위 백업 - InnoDB, MyISAM 파일 복원 (0) | 2022.10.20 |
---|---|
MariaDB 손상 복구 관련 정리 자료(2) - MYISAM 자동 복구 옵션 (2) | 2022.10.04 |
MariaDB 손상 복구 관련 정리 자료(1) -InnoDB (0) | 2022.09.27 |
[MySQL] trigger로 jsp페이지 호출하기 (0) | 2022.05.26 |
[Database] where 1=2, where 1=1을 사용하여 테이블 복사하기 (0) | 2022.05.23 |
댓글