[SQL] mysql 깨진 테이블 복구하기 - 손상 Crash 복구

2022. 11. 15. 14:35기술집/WEB관련

728x90

mysql 이라고 썼지만 지금 사용하고있는건 mariaDB.

예전에 시스템을 구축했던 어느 회사에서 쿼리 에러가 뜬다고 연락이 왔습니다.

매우 영세한 업체인데다 시스템은 간단해서 크게 손볼건 없다고 생각했는데

테이블 손상 될건 생각을 못했네요.

 

첨에는 에러문을 보니 sql 구문에는 문제가 없어보이는데..

혹시 버전업을 해서 안먹히는게 있나?? 싶었지만 그런것도 아니고.

 

확인을 해 보니 부분적으로 손상이 발생했습니다.

그래서 작업하면서 mysql 깨진테이블 복구하기 소개를 해 보겠습니다.

 

 

접속해서 확인을 해 보니...

Table '테이블이름' is marked as crashed and should be repaired

이렇게 표시되는 테이블이 두개.

번역하면 고장난것으로 표시되어 수리해야 함. 이라고 나옵니다.

구글번역기루요 ㅎㅎㅎㅎ

한바디로 깨진 테이블이라는겁니다.

 

 

그리고 이런 테이블이 4개가 있었습니다.

1030 - Got error 134 from storage engine

스토리지 엔진문제라고 하지만.. 결론은 그냥 mysql 테이블 손상 이라고 보시면 됩니다.

 

문제가 되는 테이블에서 특정 레코드만 에러가 나오고, 

다른 레코드는 조회도 잘 됩니다.

부분적으로 문제가 생긴거라서 조회가 되었다 안되었다 하는건데요.

이런경우에 방치하면 더 안좋아지죠.

 

문제는... 레코드 수가 1만이 넘어간다!

문제가 되는 레코드는 5000번째에 있다!

 

도대체 어떻게 찾아야하는걸까요??

SELECT 에 LIMIT 걸어가면서 전부 다 조회를 해 봐야하는걸까요?

1000개씩 10번만 하면 되네???

그럼 10만이 넘어가면???

100번하나?

리소스가 충분해서 한번 조회할때 10000개씩 보는건가???

 

이런저런 문제는 뒤로하고, 하나만 하시면 됩니다.

이 명령어는 특정 테이블이 문제가 있는지없는지를 파악합니다.

 

CHECK TABLE '테이블 이름';

 

 

바로 검사를 합니다.

흠...

에러가 보이네요. 

제일 위에 warning 부분은 지금 3명의 유저가 사용중이라고 합니다.

아래 2개가 포인트인데요.

에러. 

테이블에 문제가 있다는 겁니다.

이건 Crash 깨진 테이블이라 보시면 되는겁니다.

 

 

실제로 콘솔에서 접속후에 실행해도 똑같은 느낌입니다.

Msg_text 부분이 결과라고 보시면 되는데요.

OK.

이건 문제가 없는 상태입니다.

 

방금처럼 에러가 보이면 수를 써야겠죠?

mariaDB 깨진 테이블 복구하기 방법은 간단합니다.

 

REPAIR TABLE '테이블 이름';

 

 

레코드 수가 많으니 바로 뭔가 실행은 안되는 느낌...

그래도 그냥 기다려주시면 됩니다.

그럼 이렇게 수리중이라는 느낌으로 뜨거든요.

위에 보시면 나오죠? 1163026 ~ 1163025 레코드를 바꿨다고.

수리했다는 말입니다. 문제가 되는 레코드의 위치죠.

 

그리 자세히 알지도 못하고, 알 필요도 없습니다 ㅋ

아무튼 mysql 손상 테이블 복구하기 성공이라는거죠.

 

위에 있던 check table을 이용해서 상태를 한번 볼까요?

 

 

막 에러나던 화면이 이제는 깔끔하게 OK 라고 나옵니다.

요렇게 간단히 되지 않는경우에는 실제 DB 파일있는곳에가서 다른 처리를 해 줘야하는데요.

저는 여기까지만 하겠습니다 ㅎㅎㅎㅎ

 

mysqlcheck 관련으로 검색 해 보시면 나올겁니다.

저거 작업할때 새벽에 한다고 정신이 없어 캡쳐를 못해서..저는 여기까지만 ;;;;;

 

mysql 깨진 테이블 복구하기 - MariaDB Crash 손상 테이블 복구 1단계 방법.

여기까지입니다.

어지간해서는 이정도로도 잘 될겁니다.

728x90