일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- codeigniter
- 유효성
- MYSQL
- sendmail
- python
- vscode
- 더존ERP
- 리눅스
- 목차만들기
- php
- 문자열
- sp_who
- 핑테스트
- js
- 메일
- port
- 정규식
- erp
- 정규표현식
- crontab
- MSSQL
- 트랜젝션
- 자바스크립트
- JavaScript
- 이메일주소
- pingtest
- jquery
- ping
- 포트
- 핑
- Today
- Total
ioerror
MySql 의 MyISAM 이 깨졌을때?! 본문
들어가며
요즘은 서버 장비가 잘나와서 격지 못했는데, 예전에는 특히 사무실에서 서버를 돌릴때 정전이라도 나서 서버가 꺼져 버린다거나, 비정상적으로 다운되었을때 MySql의 엔진중 하나인 MyISAM을 구성하는 파일이 깨져서 디비를 날려버리는 경우가 간혹 있었다.
복구 하는 명령어로 복구 할수는 있겠으나 혹여라도 복구가 안되면, 거기다가 백업도 안되어 있다면 정말 큰일이다.
특히나 MyISAM 엔진은 특히 용량이 많을 수록 깨지기도 쉽다는 평도 있었고, 복구도 어려워진다.
MyISAM 에 비해 innoDB 엔진은 복구 기능이 잘되어 있어서 많이 사용하지만 MyISAM 보다 설정이나 사용하기가 까다로운 점이 있다.
1. 상황
웹에서 MySql을 사용하는 게시판(페이지)를 열었거나 콘솔에서 mysql에 접속해서 게시판을 조회(select)등을 하니 1016 오류를 뱉어 낸다.
테이블 데이터 파일을 읽을 수 없다는 것이다.
ERROR 1016: Can't open file: '{테이블명}.MYD'. (errno: 145)
또는
{테이블명} is marked as crashed and should be repaird.
2. 복구방법
1) MySql을 종료한다.
2) 콘솔에서 MySql의 디비 파일이 있는 폴더로 이동한다.
4) check(점검), analyze(분석), repair(복구), check(점검)을 순서대로 실시 한다.
3) 위 4)항 으로 안될 경우 MySql 서비스를 중지하고 myisamchk을 이용해서 복구 한다.
# 테이블을 점검한다.
> check table {테이블명};
# 테이블 상태를 분석 한다.
> analyze table {테이블명};
# 테이블을 복구 한다.
> repair table {테이블명};
# 테이블을 점검한다.
> check table {테이블명};
# 위 방법으로 안될 경우 mysql의 data 폴더로 이동
# data 폴더가 어디인지 모를 경우 my.cnf 의 datadir을 확인한다.
# MySql을 종료한다.
> mysqladmin -uroot -p shutdown
# 먼저 myisamchk 명령어의 옵션 -ev를 이용해서 테이블 MYI 파일의 상태를 점검한다.
> myisamchk -ev {테이블명}.MYI
# 다음으로 myisamchk -r 명령으로 MYI 파일을 복구 진행한다.
> myisamchk -r {테이블명}.MYI
이렇게 해도 안되면 백업파일을 찾아 보고 없다면 집에 간다.
3. myisamchk 옵션
-s : 오류가 발생하면 오류 메시지 표시
-ev : 정밀한 검사 실시 (--extend)
-r : 복구 실시
-v : 상세 메시지 표시
-o : -r 옵션보다 정밀하고 안전하게 복구하지만 속도는 늦다.
-e : 복구 옵션 최종 보스, -o 옵션으로 안될경우 사용, 하지만 완전히 요단강 건널 가능성도 있다.
참고) MYI, MYD, frm 파일은 뭐임?
MYI : 테이블의 인덱싱 정보가 저장된 파일
MYD : 테이블의 실제 데이터가 저장되는 파일
frm : 테이블의 구조(스키마)가 저장되는 파일
'DataBase' 카테고리의 다른 글
MYSQL 8 에서 PASSWORD 함수 사용하기 (0) | 2021.11.26 |
---|---|
MSSQL 최적화, Block 하고 있는 쿼리 찾기(병목현상을 잡아라) (0) | 2021.01.23 |
MySQL 최적화(Optimize) 및 복구(refair) 자동화 쉘스크립트 (0) | 2020.10.17 |
MSSQL 프로세스 확인 (0) | 2020.10.16 |
MySQL auto_increment 의 다음 등록값 확인 방법 (1) | 2019.12.11 |